【问题标题】:Is it bad write different files from different threads?从不同的线程写不同的文件是不是很糟糕?
【发布时间】:2018-07-31 14:41:37
【问题描述】:

在主线程上写入数据,在后台线程上写入文件:

d.write(toFile: filePath, atomically: true) //d is NSDictionary

[archiveData writeToFile:randomPath atomically:YES]; //archiveData is NSData

但它们指向的不是同一个位置。应用程序会崩溃吗?

【问题讨论】:

  • 这里发生的事情的正确术语是“未定义的行为”。它可能会崩溃,它可能不会崩溃,它可能会正确写入您的数据,您可能认为它已经工作但发现实际数据已损坏或不正确。正确管理写入文件的方式和时间(以及从何处)总是更好。 “未定义的行为”从来都不是一件好事。
  • 所以你建议写入所有数据——即使它们是不同的——总是来自同一个序列?
  • NSDictionary writeToFile:atomically: 已弃用。

标签: ios nsdictionary nsdata


【解决方案1】:

您说“但他们指的不是同一个位置”。你怎么知道的?你能保证吗?您的代码中没有任何内容禁止它。你怎么知道filePathrandomPath 不是同一条路径?不要赌博。协调您的文件写入。 (最简单的方法是在主线程上执行它们,但这不是唯一的方法,而且可能还不够;例如,您可以在此处使用 NSFileCoordinator。)

【讨论】:

  • 逻辑保证randomPath 总是有扩展名.7zfilePath.plist
  • 也许吧。也许不是。
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2010-11-06
  • 2011-10-06
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多