回答
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備份,這仍然非常容易,但障礙稍微高一些。 –