本地存储 之 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];
}
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];
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Tomcat端口被占用解决方法(不用重启)
- “传奇”图象数据存储方式
- 超大数据量存储常用数据库分表分库算法总结
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- C++实现图的邻接表存储和广度优先遍历实例分析
- 详解Android文件存储
- 一些关于数据存储和查询优化的想法
- C#调用sql2000存储过程方法小结
- PHP 存储文本换行实现方法
- 注册表中存储数据库链接字符串的方法
- 正确面对服务器数据存储防止数据丢失
- 高性能Javascript笔记 数据的存储与访问性能优化
- 在android开发中进行数据存储与访问的多种方式介绍