基于文件的存储
在iOS开发中,经常需要将数据存储到本地,实现的策略有很多,本篇文章简单介绍一下文件存储方式。
存储位置
我们可以将各种各样的数据存储到本地,在iOS应用中,这些文件应当存储在沙盒中
如果是需要持久化的数据应当存储在沙盒的Documents目录当中,如:
NSString*docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];NSString*path=[docPathstringByAppendingPathComponent:@"file.txt"];
存储的数据格式
二进制数据:使用NSFileHandle类,如:
NSFileHandle*fh=[NSFileHandlefileHandleForWritingAtPath:path];[fhwriteData:data];
其中data是一个NSData对象,可以是任何数据
plist格式:与OC中的字典、数组、数值对象对应的非常好
这几种对象都可以有直接进行文件操作的方法,如:arrayWithContentOfFile: writeToFile:
JSON/XML格式:
网络开发中,网络上的数据特别是移动端进行网络通信中的数据大部分采用JSON/XML格式
从网络获取这些格式的数据封装在NSData对象中,可以直接调用NSData下面的方法进行文件存储:
+(instancetype)dataWithContentsOfFile:(NSString*)path-(BOOL)writeToFile:(NSString*)pathatomically:(BOOL)atomically
归档存储
另一个特殊的存储方式是将模型对象直接进行归档存储
要求:模型对象遵循NSCoding协议,并实现协议中的两个协议方法
如:
//AMPerson.h@interfaceAMPerson:NSObject<NSCoding>@property(nonatomic)NSString*name;@property(nonatomic)NSNumber*age;@end
//AMPerson.m-(void)encodeWithCoder:(NSCoder*)aCoder{//NSCoder是编码器对象[aCoderencodeObject:self.nameforKey:@"aaa"];[aCoderencodeObject:self.ageforKey:@"bbb"];}-(instancetype)initWithCoder:(NSCoder*)aDecoder{if(self=[superinit]){self.name=[aDecoderdecodeObjectForKey:@"aaa"];self.age=[aDecoderdecodeObjectForKey:@"bbb"];}returnself;}
//归档存储AMPerson*p1=[[AMPersonalloc]init];p1.name=@"aaa";p1.age=@10;AMStudent*p2=[[AMStudentalloc]init];p2.name=@"bbb";p2.age=@20;p2.score=@99;AMPerson*p3=[[AMPersonalloc]init];p3.name=@"ccc";p3.age=@30;NSArray*arr=@[p1,p2,p3];[NSKeyedArchiverarchiveRootObject:arrtoFile:path];
//解档读取NSArray*arr=[NSKeyedUnarchiverunarchiveObjectWithFile:path];
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。