与用纯C语言创建二进制文件相比,使用NSUserDefaults保存游戏状态/设置有什么好处吗?
专门为iOS游戏设计的。
发布于 2011-10-04 08:19:13
使用NSUserDefaults最大的优点是,你不必担心实际写入“磁盘”的问题-- -synchronize会在“适当的时间”自动调用,包括应用程序后台(如果支持多任务处理)或终止(如果不支持多任务处理,或者设置UIApplicationExitsOnSuspend或其他名称)。这意味着您可以更频繁地更新NSUserDefaults,而不会产生太多开销。
缺点是我非常确定整个文件被加载到内存中,写操作涉及到写整个文件(我认为它甚至写到一个临时文件,然后重命名),所以它不适合存储大的,不经常变化的blob(例如照片)。
除非你保存的游戏很大,否则我会用NSUserDefaults做一些非常简单的事情,主要是因为它避免了你不得不跟踪一大堆文件。
编辑: NSUserDefaults的一个潜在的主要缺点是在应用程序崩溃时不保存,所以你可能仍然想要偶尔显式地-synchronize,这取决于你的应用程序崩溃的程度。这对于开发人员来说尤其明显,因为在Xcode中按下"stop“(或者在调试时拔出电话)实际上是一种崩溃!
发布于 2011-10-04 07:09:06
NSUserDefaults是设置的适当位置,但可能不保存游戏。
这样做的好处是可以在内存中进行缓存,并在其背后保持几十年的稳定性。缺点是您在用户默认文件(对象必须是plist-friendly,即字符串、数字、数据、日期、字典和数组)中可以放入的内容相当有限。同样,在NSUserDefaults中保存游戏状态会使处理多个保存的游戏变得更加困难。
我建议您构建逻辑类,以便可以将它们序列化/反序列化到任意字节流或从任意字节流反序列化(最简单的方法是在各种游戏状态类上实现NSCoding )。然后你就可以将文件转储到磁盘上的任意位置(例如,NSUserDefaults中的“快速保存”副本和[yourapp]/Documents/中的完整存储名列表。编码/解码的任务实际上并不与存储/检索任务紧密相关,尽管这可能是令人惊讶的。
https://stackoverflow.com/questions/7641620
复制相似问题