1.userDefault的存储路径:
项目沙盒的Library/Preferences/
2.userDefault 存在形式
userDefault作为项目的内置文件以plist的形式存在
3.userDefault 的使用:
- 写入:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:@"北京" forKey:key];
[userDefault synchronize]; --(注意 synchronize,它存在是把userDefault改变的值写入磁盘中)
- 读取
NSUserDefaults *userDefault = [NSUserDefault standardUserDefaults];
NSSting *content = [userDefault objectForKey:key];
4.写入的类型
只能保存指定的类型比如NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary如果你要保存其他类型或者自定义类型需要用到archiver. 自己需要写encode和decode两个method
写入自定义对象:
@interfaceBusinessCard: NSObject{
NSString*_firstName;
NSString*_lastName;
}
@property(nonatomic,retain) NSString*_firstName;
@property(nonatomic,retain) NSString*_lastName;
@end;
@implementation BusinessCard
@synthesize_firstName,_lastName;
-(id)initWithCoder: (NSCoder*)coder
{
if(self= [super init])
{
self._firstName=[coder decodeObjectForKey:@"_firstName"];
self._lastName=[coder decodeObjectForKey:@"_lastName"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:_firstNameforKey:@"_firstName"];
[coder encodeObject:_lastNameforKey:@"_lastName"];
}
@end
//写入
BusinessCard *bc= [[BusinessCard alloc]init];
NSUserDefaults *ud= [NSUserDefaults standardUserDefaults];
NSData *udObject= [NSKeyedArchiver archivedDataWithRootObject:bc];
[ud setObject:udObject forKey:@"myBusinessCard"];
//读取
udObject=nil;
udObject=[ud objectForKey:@"myBusinessCard"];
bc=[NSKeyedUnarchiver unarchiveObjectWithData:udObject];
5.需要注意的地方:
NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘。
6.userDefault 过大会影响启动时间
- userDefault过大对启动时间的影响是指数性的,所以值得关注。
- 解决:每次操作userDefault,都把userDefault中不相干的key 清理。