OGeek|极客世界-中国程序员成长平台

标题: ios - 在 contentsOfFile 加载后删除文件 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:38
标题: ios - 在 contentsOfFile 加载后删除文件

我正在从 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)!)
}

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



Best Answer-推荐答案


图像尚未显示,因此数据尚未完全加载,仅足以知道已加载图像的详细信息和大小。这是为了提高内存效率。根据图像格式和使用情况,数据的不同部分可能会在多个不同时间加载。

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

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






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4