gpt4 book ai didi

ios - 加载 contentsOfFile 后删除文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:59:15 27 4
gpt4 key购买 nike

我正在从 iOS 文档目录加载一个 UIImage 数组:

var images = [UIImage]()
for fileName in fileNames {
images.append(UIImage(contentsOfFile: "\(imagesPath)/\(fileName).png")!)
}

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

for fileName in fileNames {
do {
try NSFileManager.defaultManager().removeItemAtPath("\(imagesPath)/\(fileName).png")
} catch {
print("Error")
}
}

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

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

我已经确认删除是上面的问题,因为如果我注释掉那一行,应用程序运行良好,没有错误。从磁盘中删除文件后,我只在访问阵列时出错。

有没有办法切断这个连接?

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

var images = [UIImage]()
for fileName in fileNames {
let imgData = NSFileManager.defaultManager().contentsAtPath("\(imagesPath)/\(fileName).png")!
images.append(UIImage(data: imgData)!)
}

这样做不会将链接保留回磁盘上的文件。

最佳答案

图片还没有显示,所以数据还没有完全加载,只知道图片的细节和大小已经加载了。这是为了提高内存效率。根据图像格式和使用情况,数据的不同部分可能会在多个不同的时间加载。

如果您将文件加载到 NSData 中,确保它不是内存映射的,并从中创建图像,那么数据和图像应该与底层文件断开链接。这会降低内存效率,最好保留当前代码并在知道已完成所有图像处理后删除文件。

关于ios - 加载 contentsOfFile 后删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com