NSUserDefaults 原理

NSUserDefaults 用于安全存储轻量级数据,如密码和用户名,它是线程安全的单例。支持存储 NSNumber、NSString、NSDate、NSArray 和 NSDictionary 等类型。对象在存储前需转换为不可变类型。存储的数组和字典是不可变的。数据并非即时写入磁盘,可能在应用重启后丢失,需使用 synchronize 方法确保持久化。清除NSUserDefaults数据需要删除对应偏好设置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSUserDefaults  适合存储一些简单地数据,如密码,用户名等。

NSUserDefaults 是一个单例,,同时也是线程安全的,在整个程序中他可以永久的保存一个对象。

NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.(其他类型如果想要用NSUserDefaults存储,就需要转成他可以存储的类型)

NSUserDefaults 存储的对象全是不可变的这一点非常关键,弄错的话程序会出bug),例如,如果我想要存储一个 NSMutableArray 对象,我必须先创建一个不可变数组(NSArray)再将它存入NSUserDefaults中去。

NSUserDefault保存的数据在程序没有关闭前能成功读取到,但是当应用程序重启之后,就无法读取到,原因就是数据没有即时写入。通过官方文档可以了解到,UserDefaults是根据时间戳定时的把缓存中的数据写入本地磁盘,而非即时写入。所以调用set方法之后数据有可能还没有写入磁盘,应用程序就已经终止了。保险期间,我们在对重要的数据保存时使用synchornize方法强制写入。但是也要注意,不用频繁的使用synchornize。(引用http://www.mamicode.com/info-detail-137868.html)

用NSUserDefaults存储的数据下次程序运行的时候依然存在,它把数据存储在什么地方了?如何能够清除?

其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。 比如说这个是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装 

NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhh152

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值