iOS数据存储(一)
程序员文章站
2022-05-11 15:39:16
...
iOS开发常用的数据持久化方式有NSUserdefaults(属性列表),NSKeyedArchiver(归档/解归档),SQLite 3, CoreData等。
1.【属性列表】
NSUserDefaults 是一个单例,整个程序中只有一个实例对象,用于数据的永久保存,也是使用最简单。
⚠️支持的数据类型有:NSNumber,double,float,NSInteger,NSString,NSDate,NSArray,BOOL,NSDictionary。
⚠️NSUserdefaults存储的对象是不可变的,如果想要存一个可变数组的对象,要先将它转为不可变数组,然后存到NSUserdefaluts中。
⚠️ NSUserdefaults本身不支持自定义对象存储,不过它支持NSData
//保存不可变数据
NSString *obj = @"obj";
[[NSUserDefaults standardUserDefaults] setObject:obj forKey:@"objkey"];
//读取不可变数据
NSString *obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"objkey"]
//保存可变数据
NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:@"A",@"B",@"C", nil];
[array addObject:@"D"];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"arraykey"];
//读取可变数据(不能直接读取)
NSArray *array= [[NSUserDefaults standardUserDefaults] ObjectForKey:array forKey:@"arraykey"];
NSMutableArray *arr = [[NSMutableArray alloc]initWithArray:array];
//保存对象
Dog *dog = [Dog alloc]init]; //自定义一个Dog类,并实例化一个对象dog
dog.xxx = ……//属性
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dog]; //NSUserDefaults不支持自定义对象,但支持NSData,所以将自定义对象转化成NSData类型
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"dog"];
//对象读取
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"student"];
Dog *dog = [NSKeyedUnarchiver unarchiveObjectWithData:data];
⚠️保存不同的数据,key不能重复,不然会被覆盖或者bug
【归档/解归档】
归档/解归档是将对象以稳健的形式保存到磁盘中(也称序列化,持久化),使用时通过保存该文件的路径来读取该文件内容(解档,反序列)。
⚠️用于foundation中对象的存取
⚠️自定义对象的存取
//归档
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"A" forKey:@"a"];
BOOL ret = [NSKeyedArchiver archiveRootObject:dict toFile:@"xxx.xx.x保存路径"];
if (ret){
NSLog(@"归档成功");
}else {
NSLog(@"归档失败");
}
//解归档
id obj = [NSKeyedUnarchiver unarchiveObjectWithFile:@"xxx.xx.x保存路径"];
if ([obj isKindOfClass:[NSDictionary class]]){
NSMutableDictionary *dict = obj;
}
上一篇: 数据存储(一)
下一篇: ps命令在docker容器不存在
推荐阅读
-
IOS 实现一个死锁导致 UI 假死的例子
-
详解iOS开发中解析JSON中的boolean类型的数据遇到的问题
-
详解iOS通过ASIHTTPRequest提交JSON数据
-
ios 添加scrollView滚动到一定程度的方法。
-
谈谈iOS开发之JSON格式数据的生成与解析
-
laravel怎么接收和保存一组checkbox到数据库?
-
php基本语法及基本数据结构(一)
-
Mysql中返回一个数据库的所有表名,列名数据类型备注_MySQL
-
react通过axios请求数据,用一个bol来判断数据是否加载完成后,渲染在页面上,不用async await和定时器的更好方法
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)