简单讲述一下NSData在OC中的应用
NSData是以二进制存储信息的,所以这就决定了它的使用方式,就是把对象信息转化为二进制数据信息
1.对于NSString
字符串可以通过它的内置方法进行数据转换
NSString *str = @"Hello World 你好,世界";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str2);
2.对于自定义的对象,是用归档、解档方法进行转化存储为NSMutableData
归档可以简单理解为把一个对象的信息整理成为一个档案
解档就是把档案里的信息提取出来转化为对象
归档解档的前提是需要在你自定义的类中实现<NSCopying>协议
实现协议中的
#pragma mark 归档方法
- (void)encodeWithCoder:(NSCoder *)aCoder;
#pragma mark 解归档方法
- (id)initWithCoder:(NSCoder *)aDecoder
@implementation MyClass
#pragma mark 归档方法
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.students forKey:@"class"];
}
#pragma mark 解档方法
-(id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init])
{
self.students = [aDecoder decodeObjectForKey:@"class"];
}
return self;
}
@end
MyClass *class = [[MyClass alloc]init];
/*-------------归档操作---------------*/
//创建一个可变的二进制对象/数据包对象
NSMutableData * data = [[NSMutableData alloc] init];
//ka本身是个归档工具,相当于档案管理员,负责将数据整理,填入档案包。
NSKeyedArchiver * ka = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
//将class放入数据包
[ka encodeObject:class forKey:@"class"];
//同一个包里可以放入多个对象
//封口
[ka finishEncoding];
/*-------------解档操作---------------*/
//创建解归档管理员,负责将包中数据取出,整理还原。
NSKeyedUnarchiver * kua = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
//取出包中数据
iOSClass * class = [[kua decodeObjectForKey:@"class"] retain];
//封口
[kua finishDecoding];
3.我们把对象信息通过上述方法转化为NSData后就可以向文件中写了
PATH 为存储路径
[data writeToFile:PATH atomically:YES];