理解NSUserdefaults

40 篇文章 0 订阅
32 篇文章 0 订阅

首先建议阅读下这篇译文:《第十三章: User Defaut》

它把user defaults的功能概括为注册程序的出厂设置,保存用户偏好设置,以及读取之前保存过得用户偏好设置。鉴于本文写得非常到位,就把关键段落摘抄在下方。


每个程序有会有一些出厂默认设置. 当用户修改他的defaults时, 只有和出厂默认设置不同的user defaults会存储在user default数据库. 所以当程序启动时,我们需要首先使用出厂默认设置. 这个过程叫: registering defaults。也就是说出厂设置不会存起来,每次程序起来都要注册。

当registering defaults完成后, 我们将使用user defaults配置用户所需. 这个过程叫做: reading and using the defaults. user defaults database中的数据将会自动从文件系统中读取.

你也有可能创建一个Preferences panel来让用户设置defaults, 对于defaults 对象的改变会自动写入文件系统中.这个过程叫: setting the defaults 图13.3



以下是NSUserDefaults类的一些常用方法
+ (NSUserDefaults *)standardUserDefaults
返回全局标准 defaults 对象

- (void)registerDefaults:(NSDictionary *)dictionary
注册出厂默认设置

- (void)setBool:(BOOL)value   forKey:(NSString *)defaultName
- (void)setFloat:(float)value forKey:(NSString *)defaultName
- (void)setInteger:(int)value forKey:(NSString *)defaultName
- (void)setObject:(id)value   forKey:(NSString *)defaultName
修改defaults方法

- (BOOL)boolForKey:(NSString *)defaultName
- (float)floatForKey:(NSString *)defaultName
- (int)integerForKey:(NSString *)defaultName
- (id)objectForKey:(NSString *)defaultName
对其defaults方法.如果用户没有修改过,返回出厂默认设置

- (void)removeObjectForKey:(NSString *)defaultName
删除用户设置,程序将使用出厂默认设置

-->不同类型的defaults的优先级
到目前,我们讨论了两种类型的defaults. 用户所希望的user default和出厂默认设置default. 其中前者优先级高于后者.[这里的优先级理解是这样的:假如存在多种defauts, 我们使用NSUserDefaults类去读写default是,会先去看那个类型的default].实际上,还有几种优先级存在. 这些优先级level我们称之为domains. 下面列举了程序可以用地的节domain. 优先级从高到低
. arguments: 通过command line传递. 一般我们都是通过双击程序图标来运行程序,而不是使用command line. 所以我们很少会用到
.Application: 来自于user defaults database
.Global: 用户对于整个提供的设定
.Language: 基于用户所选语言
.Registered defaults: 程序的出厂默认设置


概括起来:出厂设置可以相互覆盖,用户设置可以覆盖出厂设置,出厂设置不能覆盖用户设置,移除用户设置后变出厂设置。出厂设置不会被固化,用户设置修噶适当时机会被固化,synchronize可以强制固化修改。


参考:

http://blog.csdn.net/totogogo/article/details/7473851

http://blog.csdn.net/leikezhu1981/article/details/7108959

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值