您的位置:首页 > 移动开发 > IOS开发

本地存储 之 NSUserDefaults 及NSUserDefaults对存储对象的封装

2016-06-23 12:51 302 查看
作为iOS小菜鸟的处秀就留在此处了,如果大神不小心路过,请多多指教,或者转身走开,请忽略一个小菜鸟的抒发,不废话开始装B的处女秀


NSUserDefaults主要进行本地存储,它存储在沙盒下的library/preferences文件夹内以xxx.plist文件存在,的对象必须是属性表,所以它只能存储的类型有NSdata,Nsstring,NSdate,Nsdictionary,NSArray,并且存储的数据量较小,一般存储小型数据,如果你想存储其他类型的对象,你要将其归档并创建一个NSData来实现存储。NSUserDefaults是单例,同时也是线程安全的。
先拿非类型举个列子:
数据存储:
NSUserDefaults *defaults
=[NSUserDefaults standardUserDefaults];
NSString *name =@”default string“;
[defaults setObject:firstName forKey:@"name"];

NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:

[defaults synchronize]; 
数据存储过后,这时有点全局变量的意思了,在工程中你想在哪里想用就在哪里取就好了。
取数据:
NSString *name = [defaults objectForKey:@"name"];

要是存储类则需要归档并创建一个NSData来实现存储
对象的存储:

NSData *udObject = [NSKeyedArchiverarchivedDataWithRootObject:entity];

NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
[userDefaultsetObject:udObjectforKey:key];
 [[NSUserDefaultsstandardUserDefaults]synchronize];
取对象:
 NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
 
entity = [userDefault objectForKey:key];

如果工程大量用到NSUserDefaults来存储对象,可以建一个工具类来方便对象的存储和取,又来一个列子:
UserStandardTool.h文件

@interface UserStandardTool :NSObject
/**
 * 
保存
 *
 *  @param value      值
 *  @param defaultName key
 */
+ (void)savaObjectForKey:(id)value key:(NSString
*)key;

/**
 * 
根据key获取
 *
 *  @param defaultName key
 *
 *  @return值
 */
+ (id)getObjForKey:(NSString *)key;

+ (id)getEntityForKey:(NSString *)key;

/**
 * 
根据key清除
 *
 *  @param defaultName key
 */
+ (void)clearForKey:(NSString *)key;

/**
 * 
保存一个实体类
 *
 *  @param entity     实体
 *  @param defaultName key
 */
+ (void)savaEntityForKey:(id)entity key:(NSString
*)key;

UserStandardTool.m文件

+ (void)savaEntityForKey:(id)entity key:(NSString
*)key {
    [selfclearForKey:key];
   
NSData *udObject = [NSKeyedArchiverarchivedDataWithRootObject:entity];
    [selfsavaObjectForKey:udObjectkey:key];
}

+ (void)savaObjectForKey:(id)value key:(NSString
*)key {
    [selfclearForKey:key];
   
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
   
//    NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:entity];
    [userDefaultsetObject:valueforKey:key];
   
//UserDefaults不是立即写入,而是根据时间戳定时的把缓存中的数据写入本地磁盘。
   
//通过调用synchornize方法强制写入。
    [[NSUserDefaultsstandardUserDefaults]synchronize];
}

+ (void)clearForKey:(NSString *)key {
   
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
    [userDefaultremoveObjectForKey:key];
    [[NSUserDefaultsstandardUserDefaults]synchronize];
}

+ (id)getObjForKey:(NSString *)key {
   
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
   
return [userDefaultobjectForKey:key];
}

+ (id)getEntityForKey:(NSString *)key {
   
NSData *data = [UserStandardToolgetObjForKey:key];
   
return [NSKeyedUnarchiverunarchiveObjectWithData:data];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 存储 数据存储