菜鸟教程小白 发表于 2022-12-12 21:26:13

iphone - 使用 [UIImage imageNamed] 时未释放内存警告的图像


                                            <p><p>在我的应用中,我使用了这条线</p>

<pre><code>
</code></pre>

<p>每当加载图像时。据我了解,此功能会缓存图像以供以后使用 - 这很棒,因为大多数图像都被多次使用。</p>

<p>但是 - 当我模拟内存警告时,这些图像使用的内存似乎没有被释放 - 因为大部分内存实际上是由缓存的图像使用的,所以任何当前不需要的内存都非常重要图像从内存中释放!</p>

<p>-</p>

<p>这是预期的行为,还是图像是否保留在内存中,因为它只是一个模拟的内存警告?或者,如果我想发布这些图像,我是否必须为 UIImage 编写自己的类别来缓存图像但在内存短缺时释放不需要的图像(或者更好的是,是否有人已经这样做了/共享了它的代码) ??</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我所做的是利用不缓存的 <code>-initWithConentsOfFile</code> 和用于存储的 <code>NSMutableDictionary</code> 创建自己的缓存机制,分配的每个图像都存储在字典中图像名称作为键。如果达到内存警告,您可以释放字典并将其归零,从而释放从图像分配的所有内存。</p>

<p>这使您可以完全控制图像缓存。 <code>-imageNamed:</code> 使用自己的缓存机制,您无法控制何时何地释放分配的内存。</p>

<p>你也应该试试这个方法。</p>

<p><strong>编辑:</strong> 这是我的 UIImage 类扩展 (<a href="https://gist.github.com/2880240" rel="noreferrer noopener nofollow">https://gist.github.com/2880240</a>),用自定义缓存覆盖 <code>-imageNamed:</code>,收到内存警告后,您可以简单地使用 <code> </code>。还包括在将所有图像存储在缓存中时设置自动释放的能力,即:<code></code>。默认为 FALSE。</p>

<p>试一试,希望对你有帮助!</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 使用 时未释放内存警告的图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10906386/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10906386/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 使用 [UIImage imageNamed] 时未释放内存警告的图像