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

来源:互联网 发布:秉钧网络 编辑:程序博客网 时间:2024/05/22 08:14

作为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];

}












0 0
原创粉丝点击