在我的应用中,我使用了这条线
[UIImage imageNamed:imageName]
每当加载图像时。据我了解,此功能会缓存图像以供以后使用 - 这很棒,因为大多数图像都被多次使用。
但是 - 当我模拟内存警告时,这些图像使用的内存似乎没有被释放 - 因为大部分内存实际上是由缓存的图像使用的,所以任何当前不需要的内存都非常重要图像从内存中释放!
-
这是预期的行为,还是图像是否保留在内存中,因为它只是一个模拟的内存警告?或者,如果我想发布这些图像,我是否必须为 UIImage 编写自己的类别来缓存图像但在内存短缺时释放不需要的图像(或者更好的是,是否有人已经这样做了/共享了它的代码) ??
Best Answer-推荐答案 strong>
我所做的是利用不缓存的 -initWithConentsOfFile 和用于存储的 NSMutableDictionary 创建自己的缓存机制,分配的每个图像都存储在字典中图像名称作为键。如果达到内存警告,您可以释放字典并将其归零,从而释放从图像分配的所有内存。
这使您可以完全控制图像缓存。 -imageNamed: 使用自己的缓存机制,您无法控制何时何地释放分配的内存。
你也应该试试这个方法。
编辑: 这是我的 UIImage 类扩展 (https://gist.github.com/2880240),用自定义缓存覆盖 -imageNamed: ,收到内存警告后,您可以简单地使用 [UIImage freeCache] 。还包括在将所有图像存储在缓存中时设置自动释放的能力,即:[UIImage setShouldAutorelease:TRUE] 。默认为 FALSE。
试一试,希望对你有帮助!
关于iphone - 使用 [UIImage imageNamed] 时未释放内存警告的图像,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/10906386/
|