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

Mar*_*ski 37 iphone file-io objective-c

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

提前致谢!

dra*_*ard 52

原子通常意味着操作 不能打断将完成或无效.在编写文件时,可以通过写入临时文件来完成,然后在写入完成时将原始文件替换为临时文件.

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

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

编辑:谢谢zneak

  • 原子意味着操作完全发生或根本不发生.它可以被中断或停止或恢复,它只是不会改变系统的状态,直到它完成.虽然,结论仍然是一样的. (8认同)

Dar*_*kas 5

原子写入需要更多步骤 - 另外还会创建辅助文件。NSString 类参考解释:

\n\n
\n

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

\n
\n\n

以下是 pList 的示例:

\n\n
[array writeToFile:path atomically:YES];\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
[array writeToFile:path atomically:NO];\n
Run Code Online (Sandbox Code Playgroud)\n\n

当“否”时,它会根据您运行相同代码的次数进行更新(重复更新)。

\n

  • 我认为是因为他们认为您不应该依赖 API 未记录的复杂性来克服严重的编程错误。 (2认同)