iOS 数据持久化 (一)

iOS开发常用的数据持久化方式有NSUserdefaults(属性列表),NSKeyedArchiver(归档/解归档),write , 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;
}

###【write写入】

1.】拼接生成该目录下的文件
NSString * documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject];

NSString * docFile =[documentDirectory stringByAppendingPathComponent:fileName];
2.】往文件写入数据
2.1】NSData写入文件
[data writeToFile:FileName atomically:YES];
2.2】NSString 写入文件
NSError *error = nil;
    [string writeToFile:docFile atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error) {
        NSLog(@"写入文件失败:error = %@",error);
    }else{
        NSLog(@"写入文件成功");
    }
2.3】NSDictionary同上类似。
3.】从文件中读取
NSData *data = [NSData dataWithContentsOfFile: docFile];
NSString *string = [NSString stringWithContentsOfFile:docFile encoding:NSUTF8StringEncoding error:nil];

iOS 数据持久化 (二)—FMDB

你可能感兴趣的:(iOS,开发)