UIImage的缓存行为

时间:2009-09-28 11:27:04

标签: iphone caching uiimage

UIImage是否会从缓存中删除图片?我可以保留指向imageNamed:的图像的指针,只要我愿意使用它,或者我必须总是拨打imageNamed:吗?

2 个答案:

答案 0 :(得分:2)

UIImage返回的imageNamed:对象被视为与内存管理相同的所有其他对象。如果你想在方法调用之间保留对象的引用,那么当你完成减少引用计数时,你应该retainrelease

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对象而不是对象   本身。当你试图画一个   已清除数据的图像,   图像对象自动重新加载   来自其原始文件的数据。这个   然而,额外的负载步骤可能会导致   性能损失很小。

答案 1 :(得分:0)

UIImage缓存数据本身。你不能握住指针而只是传递它。这可能是不安全的,因为当存在内存警告并且没有对该对象的强引用时,UIImage将清除缓存的数据。每次调用[UIImage imageNamed:]。它很快并将ref返回到内存中的图像。如果图像不再在内存中,它将重新加载并传递参考