iOS文件重命名线程安全

时间:2014-02-03 23:02:07

标签: ios multithreading filesystems

假设我的iOS应用中有一些数据要写入文件。我在writeToFile:atomically:上使用NSData方法,它将数据写入临时文件,然后将临时文件重命名为我指定的位置。

此操作线程是否安全?如果我从后台线程写这个,然后碰巧在另一个线程非常不幸的时刻询问该文件是否存在(或只是抓取该文件的内容),是否可能得到无效结果?

2 个答案:

答案 0 :(得分:1)

根据定义,atomically是线程安全的,如果你在“Atomic”操作完成之前抓住它,它将不存在。如果在操作完成后访问它,那就没问题了。

它类似于属性的原子属性(我们通常将其设置为非原子属性)。它制作套装&得到“原子”,这意味着它们发生在“一瞬间”并且没有中间状态。

答案 1 :(得分:1)

我认为可能发生的最坏情况是在给定路径中找不到文件。您的应用需要正确处理这种情况。

[NSFileManager fileExistsAtPath:]的Apple文档提供了这个有用的建议(强调我的):

  

注意:尝试根据当前状态来预测行为   文件系统或文件系统上的特定文件不是   推荐的。这样做可能会导致奇怪的行为或竞争条件。的这是   更好地尝试操作(例如加载文件或创建)   一个目录),检查错误,并优雅地处理这些错误   而不是试图提前弄清楚是否操作   会成功。