【问题标题】:iOS, will writeToFile:atomically:YES never fail? [duplicate]iOS,writeToFile:atomically:YES 永远不会失败吗? [复制]
【发布时间】:2014-01-24 04:32:17
【问题描述】:

我正在为 iPad 游戏编写保存游戏功能,实际上只需要 1 个保存游戏。但是,我不确定是否应该考虑某种存档损坏并使用当前/以前的存档以防万一损坏。

iOS 设备事件能否中断原子写入操作并让我的存档处于损坏状态? 我说的是设备关闭、多任务处理、主页按钮、电话等内容.我知道原子的定义意味着它不应该,但我想确定一下。

+(void)writeSaveGameData:(NSData*)data
{
    if(data == nil)
    {
        return;
    }
     [data writeToFile:[SaveGame savegamePath] atomically:YES];

}

+(NSData*)saveGameData
{
    return [NSData dataWithContentsOfFile:[SaveGame savegamePath]];
}

【问题讨论】:

  • @Wooble 该问题询问并回答写入是否完全完成或失败而不会损坏文件。这个问题询问在什么情况下可能会发生故障。我认为这是一个很好的、新颖的问题。
  • 不存在这种情况,这是另一个问题中给出的答案。
  • 我认为您忽略了写入未完成和写入未完成损坏之间的区别。没有后者的情况。该方法从文档中返回 BOOL == YES 如果操作成功,否则为 NO。
  • 好吧,如果写不完,我还是有旧的保存,这样就好了

标签: ios iphone objective-c save atomic


【解决方案1】:

不,这并不意味着它永远不会失败,原子意味着两件事:

1 - 您的文件将正确保存,并且在完全保存之前您将无法访问它,无法访问保存一半的文件或类似的东西。

2 - 如果在保存过程中出现问题,则根本不会保存。因此,如果您的电池在保存过程中耗尽,您将丢失文件。

为了完全回答您的问题,没有办法让文件损坏,如果设备因任何原因中断您的写作,您将丢失文件。你有或没有!

正如您没有提到是保存新文件还是更新旧文件..如果您正在更新文件,则只会丢失更新,如果您正在编写新文件,则会丢失所有内容。

【讨论】:

  • 您的措辞具有误导性。您要么获取新文件,要么获取原始文件。您无法获得的是部分新文件或根本没有文件。您的回答暗示整个文件可能会丢失。那不是真的。您可能会丢失最新的更新,但至少以前的文件仍然存在。
  • 如果他正在保存一个新的,他将失去一切,如果他正在更新,他将失去更新并拥有原始文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2020-06-03
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多