2010-08-10 73 views
3

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

回答

5

将变量设置为零是没有必要的。

将属性设置为零(self.property = nil;)会在它们宣布为@property (retain)时发布。

由于+imageNamed:不以“alloc”,“copy”,“new”或“retain”开头,因此您不必释放它。由于不需要空间,因此可能会留下记忆。你看到任何泄漏或只是内存使用情况?

+0

我开始在〜340MB(没有程序打开)。如果我来回切换视图,我的内存每个交换机下降约9MB。每隔一段时间它就会恢复大约5MB,但是我把它减少到了190MB,并且一无所有。 – Derek 2010-08-10 07:14:40

3

将UIImage变量设置为nil不会做任何特别有用的操作。此外,您不应该释放从+imageNamed:返回的图像,因为方法名称并不意味着您拥有返回对象的所有权。

Cocoa维护一个图像缓存。如果它已经加载(因为UIImage对象是不可变的),后续对imageNamed:的调用将返回相同的UIImage对象,否则它将再次将其加载到缓存中。缓存中图像的生命周期由Cocoa决定。在低内存情况下,图像数据可能被清除。即使实际内部图像数据从缓存中清除,您拥有的对象仍然可以引用图像(如果从缓存中清除了Cocoa,它将重新加载图像数据)。这是在整个UIImage documentation解释。

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