OC 数据持久化存储


1.Plist文件
2.NSUserDefaults 单例(存放程序的配置信息)
3.归档(序列化存储,可以存放自定义的对象数据)
4.数据库(移动端SQLite3,CoreData,FMDB)


终端创建文件:  vim 文件名 esc :wq 回车


NSUserDefaults
// 获取单例
// 工程建好后,就会生成一个自己的偏好配置文件
// 不可以直接存储自定义的对象数据
// 数组,字符串,字典,基本数据类型 都可以直接通过方法存入
NSUserDefaults *defaults=[ NSUserDefaults standardUserDefaults ];
       
//1. 写数据
NSString *str= @"123123" ;
[defaults setObject :str forKey : @"123123" ];
       
// 立即同步数据到文件中
[defaults synchronize ];
       
       
//2. 取数据
str=[defaults objectForKey:@"123123"];
   
NSLog(@"%@",str);
       
//3. 移除某个 key value
//[defaults removeObjectForKey:@"123123"];
//str=[defaults objectForKey:@"123123"];
NSLog ( @"%@" ,str);
       
//4. 重置文件 ( 清除缓存 )
//[NSUserDefaults resetStandardUserDefaults] ;
       
//5. 打印所有键值对
//NSLog(@"%@",defaults.dictionaryRepresentation);
       
NSDictionary *dict=defaults.dictionaryRepresentation;
[dict writeToFile:@"/Users/xywzxw/Desktop/dict.plist" atomically:YES];




归档
Person *person = [[Person alloc]init];
person.name= @"Tom";
person.age= 11 ;
person.sex= @" ";
       
// 归档对象
NSData *personData=[NSKeyedArchiver archivedDataWithRootObject:person];
//NSLog(@"%@",personData);
       
// 如果查看结构,可以添加 .plist 后缀
[personData writeToFile: @"/Users/xywzxw/Desktop/OC/ 归档 /personData" atomically: YES];

       
// 解档
//NSData *personData=[NSData dataWithContentsOfFile:@"/Users/xywzxw/Desktop/OC/ 归档 /personData"];
       
//Person *per=[NSKeyedUnarchiver unarchiveObjectWithData:personData];
       
// 多个对象归档
Person *person1=[[ Person alloc ] init];
person1. name = @"Jone";
person1. age = 20;
person1. sex = @" ";
       
NSDictionary *dict= @{ @"name" : @"Tom" };
       
// 把对象转换成 data
NSMutableData *data=[ NSMutableData data];
       
// 生成一个归档对象
//data 是编码后对象数据的容器,开始归档后调用 encodeObject forKey :这个方法,系统会自动吧转码后的数据存入到 data ,归档完成后,必须调用
NSKeyedArchiver *achiver=[[ NSKeyedArchiver alloc ] initForWritingWithMutableData:data];
       
// 编码 person 对象
[achiver encodeObject :person1 forKey : @"person"];
       
// 编码字典对象
[achiver encodeObject :dict forKey : @"dict"];
       
// 结束归档
[achiver finishEncoding];
       
NSLog ( @"%@",data);


Plist
NSArray *array = @[ @"one" , @"two" , @"three" ];
NSString *filePath = @"/Users/xywzxw/Desktop/OC/Plist 文件 /test.plist";
       
NSDictionary *dict= @{ @"name" : @"zxw" };
[dict writeToFile :filePath atomically : YES];
        
// 写文件
//Plist 文件的后缀名是 .plist
//Plist 又叫属性列表
//Plist 文件的根节点类型只能是数组或字典
//Plist 文件支持的数据类型 :Array Dictionary Boolean String,Data,Date,Number  7
//Plist 文件实际上就是 XML 格式的数据
       
//atomically yes 表示传文件时,先会把数据写到一个副本中,等数据全部写入后,再放到目标路径下
       
       
BOOL writeResult = [array writeToFile :filePath atomically : YES];
NSLog ( @"%d",writeResult);
       
// 取数据
// ???????把一个可变字典存入 Plist 文件后,再取出来之后,这个对象是可变的还是不可变的
array = [ NSArray arrayWithContentsOfFile:filePath ];
NSLog ( @"%@",array);
       
  // 对字符串直接进行文件写入,只会把数据存入到一个文本文件中
//NSString *string=@"Hello";
//[string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
   

SQLite
       
sqlite3 *database= nil;
const char *filename= "/Users/xywzxw/Desktop/OC/SQLite/data.db";
// 打开数据库
sqlite3_open(filename,&database);
         
//1. 数据库操作句柄
//2.sql 语句
//3.sql 语句执行后的回调函数
//4.void* C 语言中,可以只带任意类型的指针,相当于 OC id
//5. 错误信息
       
const char *sql= "create table if not exists User(id integer)";
       
// 通过 OC 字符串构造 Sql 语句
NSString *string=[ NSString stringWithFormat : @"insert into User values('%d')" , 10];
const sql1=string. UTF8String;
             
// 如果是对象指针,就要使用 nil ,其他的就使用 NULL
sqlite3_exec (database, sql, NULL , NULL , NULL);
       
// 数据库支持的数据类型 NSString,NSNunber,NSData
//integer--->NSNumber
//text--->NSString
//blob-->NSData
       
// 关闭数据库
sqlite3_close(database);

你可能感兴趣的:(iOS,iOS,OC,持久化存储)