Приложение получает предупреждение о низкой памяти, но имеет только 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 в переменных среды?

Когда зомби включены, память никогда не освобождается, а сохраняется в пуле зомби для отладки ссылок на недопустимые указатели.