【发布时间】:2012-01-02 10:44:19
【问题描述】:
UIImage 是否曾经从其缓存中删除图像?我可以保留一个指向我从imageNamed: 获得的图像的指针,并且只要我喜欢就可以使用它,或者我必须始终调用imageNamed:?
【问题讨论】:
UIImage 是否曾经从其缓存中删除图像?我可以保留一个指向我从imageNamed: 获得的图像的指针,并且只要我喜欢就可以使用它,或者我必须始终调用imageNamed:?
【问题讨论】:
就内存管理而言,从imageNamed: 返回的UIImage 对象与所有其他对象一样被处理。如果你想在方法调用之间保持对对象的引用,你应该在完成后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:]。它速度很快,并将参考从内存中返回到图像。如果图像不再在内存中,它将重新加载并传递该引用
【讨论】: