2016-06-07 24 views
4

我一直在尋找了一段時間,做我需要做同步,如果我做的:從鍵中移除對象後,我需要在NSUserDefaults中進行同步嗎?

[[NSUserDefaults standardUserDefaults] removeObjectForKey:kType]; 

在那之後,我應該怎麼辦?:

[[NSUserDefaults standardUserDefaults] synchronize]; 

等待着你在這個答案物。

+1

http://stackoverflow.com/a/9647965/6124910 – Patrick

+0

是的,你需要調用它。此方法同步您在內存和磁盤上的更改 – iSashok

+0

[NSUserDefaults synchronize-method]的可能重複(http://stackoverflow.com/questions/9647931/nsuserdefaults-synchronize-method) –

回答

5

報價在計算器this post,答案從DarkDust

[default synchronize];的目的是使 被寫入磁盤立即用戶的默認值。你不需要明確地稱它爲 ,iOS已經在適當的時候做到了。所以你可以 刪除該行。實際上,如果每次設置默認設置時致電 synchronize,都會導致性能問題。

在iOS 7之前,當 應用程序轉換到後臺時,用戶默認始終同步的位置。從iOS 7開始,即沒有 的情況時間更長,因此您可能需要在您的應用 代理的applicationDidEnterBackground:中呼叫synchronize或註冊到 UIApplicationDidEnterBackgroundNotification通知來執行此操作。

the documentation for -[NSUserDefaults synchronize]:

因爲這個方法是每隔一段時間自動調用,使用此方法僅如果你不能等待自動 同步(例如,如果你的應用程序即將退出)或 如果您要將用戶默認值更新爲磁盤上的內容,即使 您尚未進行任何更改。

+0

如果寫入默認值,會發生什麼情況不會同步,並且在應用程序崩潰後的某個時候。我相信在這種情況下你會失去你的改變。那麼最好在寫入後始終同步? – lostintranslation

+0

除非您存儲到默認值中的數據非常重要,否則您將失去它。但是這絕不應該發生,因爲您並不認爲存儲重要的數據,並且應該重新創建所有數據,您必須以不同的方式處理。 就像關於文檔的報價一樣,同步的目的是立即寫入磁盤,通常在適當的時候由操作系統處理。 – ZetaPR

相關問題