IOS Foundation库相关知识

NSUserDefaults简介

2017-08-19  本文已影响4人  小暖风

//类似于字典,我们可以通过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];

上一篇下一篇

猜你喜欢

热点阅读