iOS4 вызывает ImageNamed: все еще течет или вызывает проблемы с памятью? - PullRequest
1 голос
/ 28 июня 2011

Так что, по-видимому, мое приложение падает на Ipod 2-го поколения из-за проблемы с памятью.То, что я делал, вызывало изображение в каждом представлении в scrollView + pageControl, когда пользователь прокручивает.И приложение рухнуло, когда оно достигло определенной точки после предупреждения памяти.Я попытался освободить вид, когда получил предупреждение, но оно все еще вызывало сбой.

Я гуглил по поводу ImageNamed: и, очевидно, была проблема в этом вызове API, но в большинстве статей говорилось, что это исправлено в последней версии iOS.1003 *

Я исправил эту проблему с вызовом imageWithContentOfFile вместо imageNamed, но мне интересно, вызывает ли ImageNamed утечку памяти или не освобождает ее при открытии представления.

1 Ответ

7 голосов
/ 28 июня 2011

imageNamed: не вызывает утечку, но ее часто неправильно понимают, что приводит к проблемам с памятью при ее использовании. После загрузки оно кэширует несжатое изображение, что означает, что в памяти сразу находятся 2 копии этого изображения. Если вы используете его для небольших часто используемых изображений (например, значков), это замечательно, потому что среда выполнения не должна извлекать файл с диска - он уже доступен в кеше. В этом случае пользователи сталкиваются с проблемами, когда они используют imageNamed: для загрузки большого изображения, например, 4-мегапиксельного изображения, полученного с помощью камеры. Это изображение занимает довольно много памяти : 4 миллиона пикселей, тип 4 байта на пиксель = 16 МБ памяти, ДВАЖДЫ. Если вы используете этот метод для загрузки изображений для слайд-шоу, обмена фотографиями, приложения камеры или чего-то еще, это очень быстро складывается.

Так что, если эти функции не соответствуют вашим потребностям, используйте один из других методов загрузки UIImage. Ваши пользователи будут вам благодарны.

Примечание : эта информация получена от инженера Apple, который представил сеанс рендеринга UIKit (# 121, я думаю, что так и было). Надеюсь, мои записи верны:)

...