释放UIImage imageNamed

时间:2010-08-10 06:59:26

标签: objective-c iphone

当我使用UIImage imagenamed时:我应该在退出之前将保存UIImages的变量设置为nil吗?我注意到有时当我在具有UIImages的视图之间切换时,内存会随着每个开关来回不断增长和增长。

2 个答案:

答案 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解释了它。

如果您的内存使用量持续增长,那么泄漏可能来自其他地方。