Приложение получает предупреждение о низкой памяти, но имеет только 5,7 Мбайт байтов в реальном времени
Мое приложение получает предупреждение о низкой памяти с повторяющимся действием и, в конечном счете, сбой. Когда я работал в инструментах, я вижу только 5,7 МБ живых байтов при аварии. (Авария не показывает трассировку, ошибки и т.д. Она просто заканчивается, что указывает на сбой памяти.)
Почему мое приложение рушится с таким низким объемом памяти? Я тестировал iOS 5.1 на iPad 1.
![Instruments screenshot]()
Edit:
Я смог исправить ошибку. Это связано с дополнительным удержанием вызова объекта, который имеет 3 UIImages
как свойства. Накопление этих объектов вызывало предупреждение и сбой памяти.
Однако вопрос все еще остается: почему инструменты показали, что всего 5,7 Мбайт живых байтов? Может ли это быть связано с автоматическим кэшированием UIImage's
?
Ответы
Ответ 1
Я не вижу никаких явных утечек в коде, который вы опубликовали, но если вы просто пытаетесь перерисовать изображение (предположительно, чтобы заставить немедленную декомпрессию), то это удивительно сложный способ сделать это. Просто сделайте следующее:
- (void)loadImage:(UIImage *)image
{
UIGraphicsBeginImageContextWithOptions(image.size, image.scale);
[image drawAtPoint:CGPointZero];
self.someImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
Надеюсь, это исправит любую утечку, которую вы видите.
Ответ 2
Установили ли NSZombieEnabled значение YES в переменных среды?
Когда зомби включены, память никогда не освобождается, а сохраняется в пуле зомби для отладки ссылок на недопустимые указатели.