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);