IOS NSUserDefaults 的使用

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 清理。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容