Управление памятью при использовании UIImage

Мое приложение активно использует объект UIImage для изменения изображений в одном UIImageView на основе пользовательского ввода и предыдущего изображения, которое было установлено. Я использую [UIImage imageNamed:] для создания своих объектов UIImage.

Думаю, это не лучший способ использовать UIImage, потому что использование моей памяти со временем увеличивается и никогда не падает. (Я знал это, когда запускал приложение с использованием Object Allocations, и, кроме того, я не использую других переменных NSString, только BOOL и UIImage)

Как мне эффективно использовать объекты UIImage и UIImageView, чтобы уменьшить объем памяти?

Спасибо


person lostInTransit    schedule 07.01.2009    source источник


Ответы (2)


[UIImage imageNamed:] 

кеширует загружаемое изображение в память. Это замечательно, если вы хотите повторно использовать один и тот же набор изображений снова и снова, но если вы постоянно показываете разные (или большие) изображения, вам следует использовать:

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];

[UIImage imageWithData:imageData];

вместо.

person rustyshelf    schedule 07.01.2009
comment
Спасибо, ржавый. Я использую тот же набор изображений. Но количество раз, когда этот метод используется в коде, составляет около 200 раз. Если есть кеширование изображений, почему со временем использование памяти должно увеличиваться? Утечек нет. - person lostInTransit; 07.01.2009
comment
Просто потому, что утечки не сообщают об утечках, это не означает, что утечек нет;) Что еще более важно, я не могу точно сказать, если вы не опубликуете свой код. - person rustyshelf; 08.01.2009
comment
Я сталкиваюсь с той же проблемой при использовании изображений, я хочу знать, какой код нужно использовать, если мы получаем изображения из базы данных sqlite. - person rkb; 07.10.2009
comment
А как насчет прямого использования UIImage *image=[[UIImage alloc]initWithContentsOfFile:imagePath]; - person rohan-patel; 08.04.2013
comment
Будет ли он быстрее, чем dataWithContentsOfFile и imageWithData? - person rohan-patel; 08.04.2013

Чтобы управлять памятью с изображением, согласно @russtyshelf, вы должны преобразовать файл изображения в данные и преобразовать его в изображение, но после этого вы должны сделать экземпляр изображения равным нулю, чтобы очистить кеш-память. то есть в viewdidload () вы должны написать как:

let image = [UIImage imageWithData:imageData];

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

image = nil
person Bansi Hirpara    schedule 07.06.2019