在使用NSUserDefault的时候,很多人以为
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"testInfo"] ;
后就已经算存储好了,再通过
[[NSUserDefaults standardUserDefaults] objectForKey:@"testInfo"];
就可以取出刚刚存的数据。
其实正常情况下没有问题,但是当重起
程序,关键字testInfo对应的竟然是空,这是什么情况呢??
我看看NSUserDefaults的头文件,就会发现,其实还有另外一个方法:synchronize,数据即时写入。
如果我们在set后,执行下面的语句:
[[NSUserDefaults standardUserDefaults] synchronize];
那么就不会出现上面的取出数据为空的情况了。
完整代码如下:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"111" forKey:@"t
est"];[defaults synchronize];
NSString *testStr = [defaults objectForKey:@"test"];
NSLog(@"testStr is: %@",testStr);
小贴士:
通过官方文档可以了解到,UserDefaults是根据时间戳定时的把缓存中的数据写入本地磁盘,而非即时写入。所以调用set方法之后数据有可能还没有写入磁盘,应用程序就已经终止了。保险期间,我们在对重要的数据保存时使用synchornize方法强制写入。
本文解析了在iOS开发中使用NSUserDefault进行数据存储时常见的误区,即默认情况下数据并非立即写入磁盘,而是根据时间戳定时写入。为确保数据安全,文章推荐在保存重要数据时调用synchronize方法强制同步。
1979

被折叠的 条评论
为什么被折叠?



