在objective-c中以原子方式写入文件的文件有什么区别而不是,这两者之间是否有任何性能差异?
提前致谢!
答案 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];
当“否”时,它会像运行相同的代码一样多次更新(重复更新)。