App 被系統終止(非正常退出)後,NSUserDefaults 設定的值丟失。原因是 setInteger:forKey: 等方法只寫入**記憶體快取**,非即時寫入磁碟。
- (void)compSave {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setInteger:compTotal forKey:@"compTotal"];
[ud setInteger:compCount forKey:@"compCount"];
[ud setBool:compShow forKey:@"compShow"];
[ud synchronize]; // 關鍵:強制同步到磁碟
}
applicationDidEnterBackground)、使用者完成重要設定、資料異動後。synchronize 是同步阻塞 I/O,頻繁呼叫會卡主執行緒。批次修改後一次同步即可。