在写公司项目时,突然发现一个问题,那就是直播页面一直销毁不掉。这样就容易造成下次再进入直播时页面会卡死。
在经过分析过后,发现是自己在使用NSUserDefaults时出现了差错
问题代码
看这段代码,我们可以看到,我用NSUserDefaults 存储的是一个对象,当时自己为了省事,直接拿到数据然后进行存储,忘了NSUserDefaults 是不能存储对象的。
那现在我们就简单说说NSUserDefaults的使用吧。
NSUserDefaults用来存储类似用户的配置等一些比较小的数据,模拟器/真机保存在沙盒路径的Library——>Preferences文件夹中
一、创建NSUserDefaults对象
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
二、创建NSUserDefaults对象之后即可往里面添加数据,它支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型,如果要存放自定义的对象(如自定义的类对象),则必须将其转换成NSData存储(重点,笔者就在这犯错了)
三、往NSUserDefaults添加数据后,它们就变成了全局的变量,App中即可读写NSUserDefault中的数据:
其实NSUserDefaults的增删改查 其实是和NSDictionary的操作是一样的,这里就不再说了。
重点
NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘(代码如下)
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults 对于小数据存储是真的方便,但是大的数据量的话,我建议还是使用数据库吧! 哈哈
网友评论