UIImage Проблемы с памятью из-за кеширования - PullRequest
3 голосов
/ 07 октября 2009

Я погуглил проблему с памятью, связанную с UIImage, и натолкнулся на множество потоков, рассказывающих о проблеме, но без реальной помощи или решения.

Я знаю, когда мы используем -imageNamed: объект кэшируется, поэтому лучше использовать initWithData:. Когда мы используем drawRect: и UIGraphicsGetImageFromCurrentImageContext(), изображение отправляется в кэш?

Также в следующем коде:

CGImageRef tmp = CGImageCreateWithImageInRect(imageToCrop.CGImage, clippedRect);    //pull the image from our cropped context    UIImage *cropped = [UIImage imageWithCGImage:tmp];//UIGraphicsGetImageFromCurrentImageContext();  
CGImageRelease(tmp);

Кэширование происходит, хотя в документации нет упоминаний об этом? Как освободить память, которая используется кешем?

1 Ответ

0 голосов
/ 07 октября 2009

Я не уверен, что ответ на ваш первый вопрос, но что касается второго вопроса, вы должны отметить, что когда вы получаете доступ к свойству CGImage UIImage, все изображение загружается в память. На это есть ссылка в документации для свойства CGImage .

Если вы закончили с изображением после использования, вы можете просто вызвать метод release в UIImage, чтобы освободить память. Если вы хотите сохранить его, но удалить из кеша, я не могу придумать другого способа, кроме как записать образ на диск, выпустить его и затем создать новый образ, используя -initWithData:

...