2011-10-03 87 views

回答

1

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

优点是您可以获得内存中的缓存以及几十年的稳定性。缺点是你在用户默认文件中可以放置的东西相当有限(对象必须是plist-友好的,例如字符串,数字,数据,日期,字典和数组。)同样,在NSUserDefaults中保存游戏状态会使其更难处理多个保存游戏。

我建议你建立自己的逻辑类,以便它们可以序列化/反序列化到/从任意字节流(最简单的方法是在你的各种游戏状态类上实现NSCoding)。然后你可以转储文件到磁盘到任意位置(例如NSUserDefaults中的“快速保存”副本以及​​中的完整保存游戏列表。编码/解码任务实际上与存储/检索任务没有强烈关联,因为这可能是令人惊讶的。

+0

我实际上避开了Documents目录,因为如果您在Info.plist中设置了' UIFileSharingEnabled',用户可以访问它。如果你打算用NSKeyedArchiver序列化一个符合NSCoding的对象,那么你可以把结果NSData放在NSUserDefaults中。虽然它可能不是“合适的”,但它确实很容易。 (你甚至可以通过在NSUserDefaults中粘贴一个数组来处理多个保存的文本,尽管它效率不高!) –

+0

1)意识到'UIFileSharingEnabled'键。这只是一个例子,此外,允许用户备份游戏存档也是有价值的。 2)也知道你可以使用'NSCoder'对象来将任意数据转换为plist友好的'NSData'对象。实际上,这是我观点的一部分。 :) –

+0

根据您的游戏,您可能不想让用户轻松加载任意保存的游戏(即作弊!),尤其是如果您的分数很高。当然,通过编辑iPhone备份,这仍然非常容易,但障碍稍微高一些。 –

5

NSUserDefaults的最大优点是您不必担心实际写入“磁盘”— -synchronize会在“适当的时间”自动调用,该公司ludes应用程序背景(如果支持多任务处理)或终止(如果不支持多任务处理,或者您设置了UIApplicationExitsOnSuspend或其他所谓的任务)。这意味着你可以更频繁地更新NSUserDefaults而没有太多的开销。

缺点是我很确定整个东西都加载到内存中,写入涉及到写入整个文件(我认为它甚至写入临时文件然后重新命名),所以它不适合存储大量,不经常变化的斑点(例如照片)。

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

编辑: NSUserDefaults的与一个潜在的主要缺点是,这取决于你的应用程序如何crashy是不保存,当应用程序崩溃,所以你可能想要明确地-synchronize偶尔。这对于开发者来说尤其明显,因为在Xcode中按下“停止”(或者在调试时拔掉电话)实际上是一个崩溃!