当我使用UIImage imagenamed时:我应该在退出前将保存UIImages的变量设置为空吗?我注意到有时当我在具有UIImages的视图之间切换时,内存会随着每次来回切换而不断增长。
发布于 2010-08-10 15:03:00
没有必要将变量设置为nil。
如果将属性声明为@property (retain),则将属性设置为nil (self.property = nil;)将释放它们。
由于+imageNamed:不是以"alloc“、"copy”、"new“或"retain”开头,所以您不必将其释放。这可能是因为不需要空间,所以东西会留在内存中。您是否看到了任何泄漏或只是内存使用情况?
发布于 2010-08-10 15:09:34
将UIImage变量设置为nil不会做任何特别有用的事情。此外,您不应该释放从+imageNamed:返回的图像,因为方法名并不意味着您拥有返回对象的所有权。
Cocoa维护了一个图像缓存。如果UIImage对象已经加载(因为UIImage对象是不可变的),则后续对imageNamed:的调用将返回相同的UIImage对象,否则将再次将其加载到缓存中。缓存中图像的生命周期由Cocoa决定。在内存不足的情况下,图像数据可能会被清除。即使从缓存中清除了实际的内部图像数据,您拥有的对象仍然能够引用该图像(如果图像数据是从缓存中清除的,Cocoa将重新加载该图像数据)。在整个UIImage documentation中都对此进行了解释。
如果你的内存使用量一直在增长,那么泄漏可能来自其他地方。
https://stackoverflow.com/questions/3446708
复制相似问题