2011-10-03 84 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中按下「停止」(或者在調試時拔掉電話)實際上是一個崩潰!