菜鸟教程小白 发表于 2022-12-12 09:38:10

ios - 在 contentsOfFile 加载后删除文件


                                            <p><p>我正在从 iOS 文档目录加载 UIImage 数组:</p>

<pre><code>var images = ()
for fileName in fileNames {
    images.append(UIImage(contentsOfFile: &#34;\(imagesPath)/\(fileName).png&#34;)!)
}
</code></pre>

<p>我将继续使用这个数组,但我不再需要这些文件,所以我继续删除它们:</p>

<pre><code>for fileName in fileNames {
    do {
      try NSFileManager.defaultManager().removeItemAtPath(&#34;\(imagesPath)/\(fileName).png&#34;)
    } catch {
      print(&#34;Error&#34;)
    }
}
</code></pre>

<p>当我这样做时,我的 UIImage 数组现在无效,并在尝试访问它们时给我错误。这不应该在内存中并且与磁盘上的文件无关吗? </p>

<p>我在加载图像时尝试在图像上使用“.copy()”命令,但这没有任何区别。</p>

<p><strong>我已确认删除是上述问题,因为如果我注释掉该行,应用程序运行良好且没有错误。从磁盘中删除文件后,我只会在访问阵列时遇到错误。</strong></p>

<p>有没有办法切断这个连接?</p>

<p>编辑:根据@Wain 的正确答案,如果我将代码更改为:</p>

<pre><code>var images = ()
for fileName in fileNames {
    let imgData = NSFileManager.defaultManager().contentsAtPath(&#34;\(imagesPath)/\(fileName).png&#34;)!
    images.append(UIImage(data: imgData)!)
}
</code></pre>

<p>这样做不会将链接保留回磁盘上的文件。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>图像尚未显示,因此数据尚未完全加载,仅足以知道已加载图像的详细信息和大小。这是为了提高内存效率。根据图像格式和使用情况,数据的不同部分可能会在多个不同时间加载。</p>

<p>如果您将文件加载到 <code>NSData</code> 中,确保它不是内存映射的,并从中创建图像,那么数据和图像应该与底层文件断开链接。这会降低内存效率,最好保留当前代码并在您知道已完成所有图像时删除文件。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 contentsOfFile 加载后删除文件,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33577219/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33577219/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 contentsOfFile 加载后删除文件