原子写入文件与不写入文件之间的区别

时间:2010-04-24 15:48:02

标签: iphone objective-c file-io

在objective-c中以原子方式写入文件的文件有什么区别而不是,这两者之间是否有任何性能差异?

提前致谢!

3 个答案:

答案 0 :(得分:50)

Atomic一般意味着操作不能被中断将完成或无效。在编写文件时,可以通过写入临时文件来完成,然后在写入完成时将原始文件替换为临时文件。

写入原子文件时发生崩溃意味着原始文件未被修改,并且存在可以删除的垃圾文件。正常写入时崩溃意味着预期的好文件已损坏。

性能方面,成本极低。在写入期间,您将拥有两个文件副本。文件替换是文件系统级别的一个非常简单的操作。

编辑:谢谢zneak

答案 1 :(得分:0)

文件系统不必为原子写入采用写/重命名循环。具有锁定语义的文件系统允许您“锁定”部分或全部文件,或者在某些情况下甚至可以执行附加到文件之类的操作,以帮助实现原子性。

@Randy,你对碎片化的假设都可能是错误的。在大多数文件系统上,写入整个文件并关闭它将导致文件碎片更少,并且在单次写入中写入大文件肯定会导致更好地使用大块。如果你的意思是文件块更容易在磁盘上“蠕变”,那取决于文件系统中的布局首选项。如果您正在写入闪存,您可能希望文件系统在可用存储中蔓延,作为写入的自我调平。

答案 2 :(得分:0)

以原子方式书写需要更多步骤 - 另外创建辅助文件。 NSString类Reference解释:

  

如果是,接收器被写入辅助文件,然后是   辅助文件重命名为path。如果否,则写入接收器   直接路径。 YES选项保证路径(如果存在)   所有,即使系统崩溃期间也不会被破坏   写入。

以下是pLists的例子:

[array writeToFile:path atomically:YES];

当“是”时,即使你在XCode中多次运行代码,pList也只更新一次,

[array writeToFile:path atomically:NO];

当“否”时,它会像运行相同的代码一样多次更新(重复更新)。