使用NSUserDefaults保存游戏状态/设置而不是在普通C中创建二进制文件有什么好处吗?
专门针对iOS游戏。
答案 0 :(得分:5)
NSUserDefaults的最大优势在于您不必担心实际写入“磁盘” - -synchronize
会在“适当的时间”自动调用,其中包括应用程序背景(如果支持多任务处理)或终止(如果不支持多任务,或者设置UIApplicationExitsOnSuspend或其他任何调用)。这意味着您可以更频繁地更新NSUserDefaults而无需太多开销。
缺点是我很确定整个内容被加载到内存中并且写入涉及写入整个文件(我认为它甚至写入临时文件然后进行重命名),因此它不适合存储大的,不经常变化的斑点(例如照片)。
除非您保存的游戏非常庞大,否则我会使用NSUserDefaults做一些非常简单的事情,主要是因为它避免了您必须跟踪一堆文件。
编辑:NSUserDefaults的一个潜在主要缺点是,当应用崩溃时无法保存,因此您可能仍希望偶尔明确-synchronize
,具体取决于您的应用的崩溃程度。这对于开发人员来说尤为明显,因为在Xcode中按“停止”(或在调试时拔掉手机)实际上是一次崩溃!
答案 1 :(得分:1)
NSUserDefaults
是设置的合适位置,但可能无法保存游戏。
优点是你可以获得内存缓存和几十年的稳定性。缺点是您可以放入用户默认文件(对象必须是plist
- 友好,即字符串,数字,数据,日期,词典和数组。)同样,保存游戏NSUserDefaults
中的状态会使处理多个保存游戏变得更加困难。
我建议您构建逻辑类,以便可以将它们序列化/反序列化为任意字节流(最简单的方法是在各种游戏状态类上实现NSCoding
。)然后你可以将文件转储到磁盘到任意位置(例如NSUserDefaults
中的“quicksave”副本和[yourapp]/Documents/
中的完整存档游戏列表。编码/解码的任务实际上与任务没有密切关联。存储/检索,尽管可能令人惊讶。