|
|
1
85
tldr:ImagedNamed很好。它能很好地处理内存。使用它,停止担忧。 2012年11月编辑 :请注意,此问题源于iOS 2.0!从那时起,图像要求和处理有了很大的进步。视网膜使图像变得更大,而加载图像则稍微复杂一些。由于内置了对iPad和视网膜图像的支持,您当然应该在代码中使用ImageNamed。现在,为了子孙后代: 这个 sister thread Rincewind 增加了一些权威。
同时警告
和
好了,就这样。ImageName:不会打碎你的窗户或谋杀你的孩子。它非常简单,但它是一个优化工具。可悲的是,它的名字很糟糕,而且没有一个等价物那么容易使用——因此,人们过度使用它,当它仅仅完成它的工作时就会感到不安 我在UIImage中添加了一个类别以修复此问题:
Rincewind还包括一些示例代码,用于构建您自己的优化版本。我看不出它值得维护,但这里是为了完整性。
|
|
|
2
5
根据我的经验,imageNamed创建的映像缓存不会响应内存警告。我有两个应用程序,它们在mem管理方面尽可能地精简,但由于缺少mem,它们仍然莫名其妙地崩溃。当我停止使用imageNamed加载图像时,两个应用程序都变得非常稳定。 我承认这两个应用程序都加载了一些大的图像,但并没有什么是完全不寻常的。在第一个应用程序中,我完全跳过了缓存,因为用户不太可能两次返回同一个图像。在第二个例子中,我构建了一个非常简单的缓存类,就像您提到的那样——将UIImages保存在NSMutableDictionary中,然后在收到内存警告时刷新其内容。如果ImageName:像这样缓存,那么我就不应该看到任何性能升级。所有这些都是在2.2上运行的-我不知道3.0是否对这一点有任何影响。 StackOverflow question about UIImage cacheing 另一个注意事项是InterfaceBuilder在封面下使用ImageName。如果你遇到这个问题,一定要记住一些东西。 |