2013-12-05 2 views
0

В моем приложении у меня есть несколько UIViewControllers для загрузки нескольких изображений на каждом из них. Глядя на используемую память, я понял, что память никогда не опускается, поскольку я представляю viewcontrollers и уменьшаю их, память всегда поднимается. Я начал искать о и выяснить, что проблема заключается в способе я загружать изображения, метод я использовал был imageNamed:Используемая память никогда не спускается с помощью UIImage: imageWithContentsOfFile

UIImage *oneImage = [UIImage imageNamed:imageName]; 

Так я изменил метод:

UIImage *oneImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]]; 

Но кадры памяти так же ...

Я использую ARC и прежде, чем уволить из uivicontroller я называю:

oneImage = nil; 

И проблема сохраняется, любая идея о том, как ее решить?

+0

Вы уверены, что у чего-то еще нет ссылки на изображение? Возможно, 'UIImageView'? Используйте инструменты и посмотрите, что держит ссылку на изображение. – rmaddy

+0

У меня есть uiimageview per uiimage, как я должен отключить uiimageview, просто с нуля? –

+0

Нет. Все это должно быть очищено, если контроллер просмотра отклонен. Скорее всего, у вас есть цикл сохранения с контроллером представления, поэтому, когда вы отклоняете контроллер вида, он не освобождается, что означает, что ни один из его представлений и других ресурсов также не освобождается. Используйте инструменты и проверьте, продолжает ли контроллер просмотра после его увольнения. Если да, посмотрите, что держит ссылку на него. Попробуйте выполнить анализ в Xcode. Общей проблемой является использование 'self' в блоке. – rmaddy

ответ

0

Изображение, вероятно, входит в авторешетку. Я никогда не понимал этого ясно о пулах ARC и autorelease. Я думал, что они бесполезны в ARC, полезно только в том случае, если вы смешиваете старый код, но это не так. Иногда ARC выпускает ресурсы, даже если вы используете метод, который возвращает объект автозапуска прямо из области действия, а иногда и нет. Использование:

[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]]; 

Существует interesting article об этой теме от Matt Galloway.

+0

Интересно, я пробовал, но он не работал, спасибо –

Смежные вопросы