当我使用UIImage imagenamed时:我应该在退出之前将保存UIImages的变量设置为nil吗?我注意到有时当我在具有UIImages的视图之间切换时,内存会随着每个开关来回不断增长和增长。
答案 0 :(得分:5)
不需要将变量设置为nil。
将属性设置为nil(self.property = nil;
)将在声明为@property (retain)
时释放它们。
由于+imageNamed:
不以“alloc”,“copy”,“new”或“retain”开头,因此您不必释放它。因为不需要空间,所以可能会留在内存中。您是否看到任何泄漏或只是内存使用?
答案 1 :(得分:3)
将UIImage变量设置为nil
将不会做任何特别有用的事情。此外,您不应该释放从+imageNamed:
返回的图像,因为方法名称并不意味着您拥有返回对象的所有权。
Cocoa维护图像缓存。对imageNamed:
的后续调用将返回相同的UIImage
对象(如果它已被加载)(因为UIImage
对象是不可变的),否则它将再次加载到缓存中。缓存中图像的生命周期由Cocoa决定。在低内存情况下,可以清除图像数据。即使从缓存中清除了实际的内部图像数据,您拥有的对象仍然可以引用该图像(如果从缓存中清除图像数据,Cocoa将重新加载图像数据)。整个UIImage
documentation解释了它。
如果您的内存使用量持续增长,那么泄漏可能来自其他地方。