• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 contentsOfFile 加载后删除文件

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:38:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在从 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap