假设我的iOS应用中有一些数据要写入文件。我在writeToFile:atomically:
上使用NSData
方法,它将数据写入临时文件,然后将临时文件重命名为我指定的位置。
此操作线程是否安全?如果我从后台线程写这个,然后碰巧在另一个线程非常不幸的时刻询问该文件是否存在(或只是抓取该文件的内容),是否可能得到无效结果?
答案 0 :(得分:1)
根据定义,atomically是线程安全的,如果你在“Atomic”操作完成之前抓住它,它将不存在。如果在操作完成后访问它,那就没问题了。
它类似于属性的原子属性(我们通常将其设置为非原子属性)。它制作套装&得到“原子”,这意味着它们发生在“一瞬间”并且没有中间状态。
答案 1 :(得分:1)
我认为可能发生的最坏情况是在给定路径中找不到文件。您的应用需要正确处理这种情况。
[NSFileManager fileExistsAtPath:]
的Apple文档提供了这个有用的建议(强调我的):
注意:尝试根据当前状态来预测行为 文件系统或文件系统上的特定文件不是 推荐的。这样做可能会导致奇怪的行为或竞争条件。的这是 更好地尝试操作(例如加载文件或创建) 一个目录),检查错误,并优雅地处理这些错误 而不是试图提前弄清楚是否操作 会成功。