NSUserDefaults简介
//类似于字典,我们可以通过key和Value往里面存放一些数据,它会把这些key,value保存在本地前提是小数据量plist文件
/***********************存数据*******************/
//通过它拿到对象的实例,它其实也是一个单例
NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];
[userDefaultssetInteger:123forKey:@"number"];
NSArray*array =@[@"123",@"abc"];
//存数据
[userDefaultssetObject:arrayforKey:@"array"];
[userDefaultssynchronize];//将数据同步到文件里面
/***********************取数据*******************/
NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];
NSIntegerinteger = [userDefaultsintegerForKey:@"number"];
//取数据
NSArray*array =[userDefaults objectForKey:@"array"];
NSLog("%d",integer);
NSLog("%@",array);
对象归档的基本概念和用法
概念:对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象,也可以称它为对象序列化,对象持久化
我们以数组为例,实现一个数组的归档和解归档
第一种比较简单的解归档缺陷:一个对象对应一个归档
//归档NSKeyedArchiver
NSString*homeDirectory =NSHomeDirectory();//拿到当前用户的根目录
NSArray*array = [[NSArrayalloc]initWithObjects:@"123",@"456",@"999",@"000",nil];
NSString*directoryA = [homeDirectorystringByAppendingPathComponent:@"array.archive"];//然后在这个目录上面追加一个文件名 ,这个文件名,扩展名可以随便写
//array要归档的对象directoryA文件路径通过这个方法就可以进行一个归档它会返回一个BOOL类型告诉我们是否归档成功
if([NSKeyedArchiverarchiveRootObject:arraytoFile:directoryA]) {
NSLog(@"archive success");
}
//解归档NSKeyedUnarchiver给一个路径把文件内容读出来
//获得归档路径
NSString*homeDirectory =NSHomeDirectory();
NSString*directoryA = [homeDirectorystringByAppendingPathComponent:@"array.archive"];
NSArray*unArray = [NSKeyedUnarchiverunarchiveObjectWithFile:directoryA];
NSLog(@"%@",unArray);
第二种方法:
自定义内容归档可以把多个对象归档到同一个文件去 更强一点
归档
1.使用NSData实例作为归档的存储数据
2.添加归档的内容(设置key与Value)
3.完成归档
4.讲归档数据存入磁盘中
解归档
1.从磁盘读取文件,生产NSData实例
2.根据Data实例创建和初始化解归档实例
3.解归档,根据key访问value的值
//归档
NSString*homePath =NSHomeDirectory();
NSString*filePath = [homePathstringByAppendingPathComponent:@"customContent.archive"];
//创建一个可变的data给归档对象
NSMutableData*data = [NSMutableDatadata];
NSKeyedArchiver*archiver =[[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
//具体给每一个对象进行归档归档一个float数据类型 (以编码的形式进行归档)
[archiverencodeFloat:50forKey:@"weight"];
//归档一个object
[archiverencodeObject:@"jack"forKey:@"name"];
//会把以上数据全都塞到data里面去
[archiverfinishEncoding];
[archiverrelease];
//然后拿data写文件
[datawriteToFile:filePathatomically:YES];
//解归档
//获得路径
NSString*homePath =NSHomeDirectory();
NSString*filePath = [homePathstringByAppendingPathComponent:@"customContent.archive"];
//初始化一个data
NSData*content = [NSDatadataWithContentsOfFile:filePath];
//把这个data交给一个解归档对象
NSKeyedUnarchiver*unarchiver = [[NSKeyedUnarchiveralloc]initForReadingWithData:content];
//通过key拿到对应的对象
floatweight = [unarchiverdecodeBoolForKey:@"weight"];
NSString*name =[unarchiverdecodeObjectForKey:@"name"];
[unarchiver release];