首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSUserDefaults保存游戏设置/状态的优势?

使用NSUserDefaults保存游戏设置/状态的优势?
EN

Stack Overflow用户
提问于 2011-10-04 06:59:42
回答 2查看 1K关注 0票数 4

与用纯C语言创建二进制文件相比,使用NSUserDefaults保存游戏状态/设置有什么好处吗?

专门为iOS游戏设计的。

EN

回答 2

Stack Overflow用户

发布于 2011-10-04 08:19:13

使用NSUserDefaults最大的优点是,你不必担心实际写入“磁盘”的问题-- -synchronize会在“适当的时间”自动调用,包括应用程序后台(如果支持多任务处理)或终止(如果不支持多任务处理,或者设置UIApplicationExitsOnSuspend或其他名称)。这意味着您可以更频繁地更新NSUserDefaults,而不会产生太多开销。

缺点是我非常确定整个文件被加载到内存中,写操作涉及到写整个文件(我认为它甚至写到一个临时文件,然后重命名),所以它不适合存储大的,不经常变化的blob(例如照片)。

除非你保存的游戏很大,否则我会用NSUserDefaults做一些非常简单的事情,主要是因为它避免了你不得不跟踪一大堆文件。

编辑: NSUserDefaults的一个潜在的主要缺点是在应用程序崩溃时不保存,所以你可能仍然想要偶尔显式地-synchronize,这取决于你的应用程序崩溃的程度。这对于开发人员来说尤其明显,因为在Xcode中按下"stop“(或者在调试时拔出电话)实际上是一种崩溃!

票数 5
EN

Stack Overflow用户

发布于 2011-10-04 07:09:06

NSUserDefaults是设置的适当位置,但可能不保存游戏。

这样做的好处是可以在内存中进行缓存,并在其背后保持几十年的稳定性。缺点是您在用户默认文件(对象必须是plist-friendly,即字符串、数字、数据、日期、字典和数组)中可以放入的内容相当有限。同样,在NSUserDefaults中保存游戏状态会使处理多个保存的游戏变得更加困难。

我建议您构建逻辑类,以便可以将它们序列化/反序列化到任意字节流或从任意字节流反序列化(最简单的方法是在各种游戏状态类上实现NSCoding )。然后你就可以将文件转储到磁盘上的任意位置(例如,NSUserDefaults中的“快速保存”副本和[yourapp]/Documents/中的完整存储名列表。编码/解码的任务实际上并不与存储/检索任务紧密相关,尽管这可能是令人惊讶的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7641620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档