2011-11-25 55 views
1

我正试图找到方法来减少我的应用程序的内存使用情况,并且我对UIImage有一个想法。我对UIImage进行了相当广泛的使用,其中一些对于多个视图很常见。实例化单个UIImage,然后在整个应用程序中使用指向同一图像的指针,而不是为每个视图中的同一图像分配新的UIImage有更高的内存效率吗?或者,操作系统是否足够智能地自动缓存UIImage,以便它只存储在内存中一次? (怀疑是这样,但我不得不问)切断UIImage内存使用情况

谢谢。

回答

3

直为imageNamed:

这种方法看起来在系统中的高速缓存,用于与 指定的名称和该对象,如果它存在,则返回的图像对象。如果匹配的 图像对象尚未存在于缓存中,则此方法从指定文件加载图像 数据,将其缓存,然后返回结果对象 。

+0

总是一个好主意,首先检查文档,但谢谢你的回应,这肯定回答我的问题。 –

-1

是的,存储单个UIImage并使用指针更有效。

操作系统不太可能以这种方式缓存图像,即使这样做,使用指针可以更好地控制图像何时发布/释放,以便您不必指望操作系统正在运行照顾它。

+0

但是,如果你超过千UIImages副本的使用较少,你可能不必担心太多有关记忆在这里 - 这可能是更有益的简单的代码,并使用更多的副本,而不是创建非常复杂的代码它只能节省几百字节的RAM。 (特别是当涉及到调试道路时......) – Tim

+0

'imageNamed:'在第一次加载时缓存图像,然后重新使用缓存图像,随后尝试加载。 – ColdLogic

+0

哦,谢谢。我不知道这个! – Tim

1

您使用了很多图片,所以请记住[UIImage imageNamed:@""];缓存图片,所以如果您的内存不足,请使用[UIImage imageWithContentsOfFile:@""];而不缓存它。也许这可以帮助你减少内存使用量。

+0

这不会降低他的记忆问题。事实上,它会增加它,因为他反复使用相同的图像。每次重复使用时不断向记忆中添加新图像将是他想避免的确切事情。 – ColdLogic