UIImage
ли удаляет изображения из кеша? Могу ли я сохранить указатель на изображение, которое я получил от imageNamed:
, и использовать его до тех пор, пока мне нравится, или я должен всегда звонить imageNamed:
?Кэширование поведения UIImage
ответ
Объект UIImage
, который возвращается с imageNamed:
, рассматривается как все остальные объекты, поскольку управление памятью идет. Если вы хотите сохранить ссылку на объект между вызовами метода, вы должны указать retain
и release
, когда вы закончите, чтобы уменьшить счетчик ссылок.
UIImage * cachedImage;
-(void) getTheImage {
UIImage * cachedImage = [[UImage imageNamed:@"MyImage.png"] retain];
//Do something with the image...
}
//In some other method or dealloc
[cachedImage release];
Кроме того, обратите внимание, что UIImage class reference говорит:
В ситуациях с низким уровнем памяти данные изображений может быть удален из объекта UIImage в освободить память в системе. Данное поведение влияет на данные изображения , хранящиеся внутри объекта UIImage, а не объекта . При попытке нарисовать изображение , данные которого были удалены, объект изображения автоматически перезагружает данные из его исходного файла. При этом дополнительный шаг нагрузки может понести штраф за штрафные санкции .
UIImage кэширует данные сами. Вы не должны держать указатель и просто передавать это. Это может быть небезопасным с тех пор, когда есть предупреждение о сохранении памяти и не было сильного обращения к этому объекту, тогда UIImage очистит кэшированные данные. Вызовите [UIImage imageNamed:] каждый раз. Он быстрый и возвращает ref к изображению из памяти. Если изображение больше не в памяти, оно перезагрузите его и передайте, что ref