2009-09-28 2 views
0

UIImage ли удаляет изображения из кеша? Могу ли я сохранить указатель на изображение, которое я получил от imageNamed:, и использовать его до тех пор, пока мне нравится, или я должен всегда звонить imageNamed:?Кэширование поведения UIImage

ответ

2

Объект 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, а не объекта . При попытке нарисовать изображение , данные которого были удалены, объект изображения автоматически перезагружает данные из его исходного файла. При этом дополнительный шаг нагрузки может понести штраф за штрафные санкции .

0

UIImage кэширует данные сами. Вы не должны держать указатель и просто передавать это. Это может быть небезопасным с тех пор, когда есть предупреждение о сохранении памяти и не было сильного обращения к этому объекту, тогда UIImage очистит кэшированные данные. Вызовите [UIImage imageNamed:] каждый раз. Он быстрый и возвращает ref к изображению из памяти. Если изображение больше не в памяти, оно перезагрузите его и передайте, что ref