假设我有一个名为Person的对象。 人在内部加载了一个名为“person.png”的UIImage。
在我的应用程序中,我创建了许多Person对象,在运行时创建甚至删除它们。
由于Person对象内部有对UIImage的保留引用,这是否意味着每个Person都有一个唯一的图像内存分配?
或者所有Person对象是否指向图像的相同内存位置?
答案 0 :(得分:2)
嗯,这取决于你如何获得UIImage。
每次创建新的Person对象时,您是否正在使用+ [UIImage imageNamed:]?如果是这样,UIKit将缓存图像并将引用返回到内存中的单个副本。保留它以确保它保持加载状态,然后在完成引用后释放它,但在内存中只创建一个UIImage对象。
另一方面,如果你正在调用+ [UIImage initWithData:]或[[UIImage alloc] initWithContentsOfFile:]你每次都在内存中创建一个新副本(你可能需要停止:)
答案 1 :(得分:1)
如果您的Person
实例使用retain
来引用UIImage
实例,那么它将指向内存中某个图像的一个实例。
如果您使用copy
代替retain
,则您将拥有UIImage
的唯一实例。
考虑查看memory management上的Apple参考资料。