回答
NSUserDefaults
是设置的适当位置,但可能不会保存游戏。
优点是您可以获得内存中的缓存以及几十年的稳定性。缺点是你在用户默认文件中可以放置的东西相当有限(对象必须是plist
-友好的,例如字符串,数字,数据,日期,字典和数组。)同样,在NSUserDefaults
中保存游戏状态会使其更难处理多个保存游戏。
我建议你建立自己的逻辑类,以便它们可以序列化/反序列化到/从任意字节流(最简单的方法是在你的各种游戏状态类上实现NSCoding
)。然后你可以转储文件到磁盘到任意位置(例如NSUserDefaults
中的“快速保存”副本以及中的完整保存游戏列表。编码/解码任务实际上与存储/检索任务没有强烈关联,因为这可能是令人惊讶的。
NSUserDefaults的最大优点是您不必担心实际写入“磁盘”— -synchronize
会在“适当的时间”自动调用,该公司ludes应用程序背景(如果支持多任务处理)或终止(如果不支持多任务处理,或者您设置了UIApplicationExitsOnSuspend或其他所谓的任务)。这意味着你可以更频繁地更新NSUserDefaults而没有太多的开销。
缺点是我很确定整个东西都加载到内存中,写入涉及到写入整个文件(我认为它甚至写入临时文件然后重新命名),所以它不适合存储大量,不经常变化的斑点(例如照片)。
除非你保存的游戏很大,否则我会用NSUserDefaults做一些简单的事情,主要是因为它避免了你必须跟踪一堆文件。
编辑: NSUserDefaults的与一个潜在的主要缺点是,这取决于你的应用程序如何crashy是不保存,当应用程序崩溃,所以你可能想要明确地-synchronize
偶尔。这对于开发者来说尤其明显,因为在Xcode中按下“停止”(或者在调试时拔掉电话)实际上是一个崩溃!
- 1. 保存游戏状态?
- 2. android保存游戏状态
- 3. 尝试使用NSUserDefaults保存并设置UISwitch状态
- 4. 在cocos2d保存游戏状态
- 5. 保存UIButton状态NSUserDefaults
- 6. Lua,游戏状态和游戏循环
- 7. 对非游戏应用使用已保存的游戏服务
- 8. 什么是保存游戏状态的最佳方式?
- 9. 使用NSUserDefaults保存隐藏的按钮状态错误
- 10. 如何在iPhone中使用NSUserDefaults保存应用程序状态?
- 11. 如何重置cocos2d游戏状态?
- 12. 如何使用Swift在基于UIKit的游戏中保存/加载游戏状态
- 13. 在哪种方法中游戏状态应该保存/加载
- 14. 保存UIButton状态并使用NSUserDefaults加载
- 15. iPhone游戏保存
- 16. 用Javascript保存游戏
- 17. 游戏状态模式
- 18. 游戏状态给黑屏
- 19. XNA游戏状态管理
- 20. 储蓄游戏状态Android
- 21. 在Unity中使用JSON保存游戏
- 22. 使用Thread或TimerTask进行Android游戏的优点和缺点
- 23. Google Play服务|云存储游戏|获取朋友的游戏状态
- 24. 保存焦点状态
- 25. 在Android上保留游戏状态OpenGL ES应用程序
- 26. 在iOS中保存和加载设置和游戏进度
- 27. 使用node.js作为游戏服务器来跟踪游戏状态
- 28. 保存多线程游戏
- 29. Python游戏保存文件
- 30. 使用偏好设置保存切换状态,布尔值不保存
我实际上避开了Documents目录,因为如果您在Info.plist中设置了' UIFileSharingEnabled ',用户可以访问它。如果你打算用NSKeyedArchiver序列化一个符合NSCoding的对象,那么你可以把结果NSData放在NSUserDefaults中。虽然它可能不是“合适的”,但它确实很容易。 (你甚至可以通过在NSUserDefaults中粘贴一个数组来处理多个保存的文本,尽管它效率不高!) –
1)意识到'UIFileSharingEnabled'键。这只是一个例子,此外,允许用户备份游戏存档也是有价值的。 2)也知道你可以使用'NSCoder'对象来将任意数据转换为plist友好的'NSData'对象。实际上,这是我观点的一部分。 :) –
根据您的游戏,您可能不想让用户轻松加载任意保存的游戏(即作弊!),尤其是如果您的分数很高。当然,通过编辑iPhone备份,这仍然非常容易,但障碍稍微高一些。 –