今天来说一下NSData,在iOS开发中很重要的一个角色.上传图片/数据存储/类型转换/网络请求 等关键的地方都会用到NSdata,这里我介绍几种简单使用的方法!
1、NSString与NSData之间的转换
NSString *str = @"abcdefg";
NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];//把字符串变成data
NSString *backStr=[[NSString alloc]initWithData:strDataencoding:NSUTF8StringEncoding];//还原字符串
2、单个对象与NSKeyedArchiver(转换器)之间的转换
NSArray *arr = @[@"aa",@"bb"];
NSData *arrData = [NSKeyedArchiver archivedDataWithRootObject:arr];//把对象变成data
NSArray *backArr = [NSKeyedUnarchiver unarchiveObjectWithData:arrData];//把data变成对象
3.多个对象存储为一个data/常说的归档
操作思路:
1、准备一个可变的NSData,当成容器来存这多个对象
2、用alloc的方法做一个archiver的对象,用一个可变data初始化这个对象,多个对象转成data都存在了这个可变data中
3、用archiver对象来调用encoding方法把对象存入这个可变data,同时给每一个存入的对象一个key,
4、完成,闭合
NSDictionary *dic = @{@"name":@"pp",@"age":@"16"};
NSArray *secondArr = @[@"123",@"456"];
...
NSMutableData *muData = [NSMutableData dataWithCapacity:0];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:muData];
[archiver encodeObject:dic forKey:@"DicData"];
[archiver encodeObject:secondArr forKey:@"ArrData"];//这里的encode有各种对象的归档方法,根据自己所需要
............
............
............
[archiver finishEncoding];//记得归档完成要通知编译器
4.中根据之前设置好的key找到对应的对象
操作思路:
1、做一个NSKeyedUnArchiver对象,用一个存了很多对象的data来初始化
2、通过一个key,用unArchiver找到对应的对象,调用decode方法
3、完成,闭合
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:muData];
NSDictionary *unDic = [unaArchiver decodeObjectForKey:@"DicData"];
[unArchiver finishDecoding];//解完了,也好告诉编译器哦
补充:
也可以将数据转为Data,然后通过[NSFile Manager] 存到iPhone磁盘,等需要用到的时候在读取出来