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

ios - NSData.write 在 iOS 8 上触发 ECX_BAD_ACCESS

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

我的应用程序显示 OpenStreetMap 切片(256*256 图像),并在用户浏览 map 时将它们缓存在磁盘上。

在 iOS 10 上,一切都很好,但在 iOS 8 上,如果我不以原子方式编写 NSData,应用程序会崩溃 (EXC_BAD_ACCESS)。以原子方式执行它没有问题,但我想了解发生了什么。

这是我正在使用的相关代码:

private func putInCache(key:NSString, data:NSData) {

    // Get the path:
    let path:String = "\(self.imagesFolderPath)/\(key)";
    var success:Bool = false;

    // Save the image, if it does not exists:
    if(!FileManager.default.fileExists(atPath:path)) {

        // Run in background:
        DispatchQueue.global().async {

            // Put the image in the memory cache:
            self.memoryCache.setObject(data, forKey:key);

            // Insert the row in the database:
            let success = insertDataInDb(...);

            // Then save the file (if the DB insertion succeeded):
            if(success) {

                data.write(toFile:path, atomically:false); // If I set atomically to true, it works.
            }
        }
    }
}

有人知道为什么以原子方式写入数据之间存在差异吗?



Best Answer-推荐答案


来自 Apple 文档 (https://developer.apple.com/reference/foundation/nsdata):

Atomic writes guarantee that the data is either saved in its entirety, or it fails completely. The atomic write begins by writing the data to a temporary file. If this write succeeds, then the method moves the temporary file to its final location.

您可能会遇到崩溃,因为不同队列同时尝试写入同一路径。

关于ios - NSData.write 在 iOS 8 上触发 ECX_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40090845/

回复

使用道具 举报

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

本版积分规则

关注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