iOS 数据持久化

      数据持久化,就是说将数据写到文件夹中,存入当地沙盒中。所谓沙盒就是一个文件夹,里面是用来存东西的。

      沙盒机制:1.当应用程序安装到手机上,手机系统就会为应用分配一个沙盒文件夹

                    2.每个应用程序只能访问自己的沙盒文件夹,不能访问其他程序的文件夹

                    3.应用程序可以获取某些权力访问系统的文件夹

                    4.沙盒的本质就是一个文件夹,名字是随机分配的

 

模拟器中的沙盒路径:

Finder —> 前往(+ ALT) —> 资源库 —>Application Support —> iPhone Simulator —> 模拟器版本 —> Application —> 沙盒—>一个应用的所有内容

   

      沙盒文件下的四个文件夹:Document:存储用户数据,需要备份的信息,例如itunes同步,iCloud  所以音频 视频不要放到这里

                                        Library/ Caches    缓存文件,音频视频小说等

                                        Library/Pererences(不会直接操作它)

                                        .app(文件夹)(不会直接操作它,一般只会读取,用NSBundle)比如拖入工程中的plilst 照片

                                        tmp  存储临时文件,比如:下载的zip包,解压后放入caches再删除

 

 

 讲完了沙盒,现在该讲下数据持久化了

简单的数据读写,实现数据持久化

/*

     简单对象: NSString  NSArray  NSDictionary  NSData

     数据持久化: 把数据写入到文件,存储到沙盒文件夹中

 

     文件读写

     写入: 建文件 [对象 写入]   writeToFile

     读出: 初始化方法读取文件内容  initWithContentsOfFile

 

     注意:数组和字典中存储的对象类型,必须是上述四种对象!!!!

 

     NSData 用于存储二进制数据  例如 图片--> NSData -->写入

     */

 

 

     1.使用NSUserDefaults操作的是一个plist文件

     2.plist文件不需要开发人员创建,不需要指定路径,默认路径在Preferences文件夹下

     

NSUserDefaults * userDefaults = [NSUserDefaultsstandardUserDefaults];

    [userDefaults setObject:@"黄蓉" forKey:@"name"];

    [userDefaults setInteger:22 forKey:@"age"];

    

    

    //立即(同步)存储,否则存储时有延时

    [userDefaults synchronize];

 

 

 

归档(序列化) 也是用来实现数据持久化,不是数据持久化,而是两个先后步骤

复杂对象(基本数据类型  对象必须遵循NSCoding协议,对象类型中的属性也必须遵守)—>NSData

 

person —>归档—>NSData —>writeToFile—>document

person <—返归档<—NSData <— initWithContentsOfFile <—document

 

1.归档: 序列化,编码,类似压缩文件.

2.归档: 把符合条件的对象转换为NSData对象

3.能进行归档的对象,必须遵守NSCoding协议. 对象的属性,如果是对象,也必须遵守NSCoding协议

 

 

 

 

NSBundle中的文件只可读 不可写

 

NSFileManager  文件管理器,单例获取对象, 操作文件,创建,复制,剪切,删除; 创建子文件夹; 判断文件是否存在,返回值为BOOL

 

 

归档

 //使用工具,实现对person对象进行归档

    

        //NSMutableData是容器,先是空的,归档结束,用来放person

    NSMutableData * archiveData = [NSMutableDatadata];

    

        //归档工具,继承自NSCoder

    NSKeyedArchiver * archiver = [[NSKeyedArchiveralloc] initForWritingWithMutableData:archiveData];

    

        //对person对象进行归档操作

    [archiver encodeObject:p forKey:@"person"];

    

        //结束归档操作

    [archiver finishEncoding];

    NSLog(@"archiveData = %@",archiveData);

    

    

    //数据持久化将归档得到的data存入沙盒

    NSString * documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSString * filePath = [documentPath stringByAppendingPathComponent:@"singlePerson"];

    NSLog(@"filePath = %@",filePath);

    

    [archiveData writeToFile:filePath atomically:YES];

    

    [p release];

    [archiver release];

 

反归档

NSString * documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSString * filePath = [documentPath stringByAppendingPathComponent:@"singlePerson"];

    //从沙盒文件中读出data

    NSData * readData = [NSDatadataWithContentsOfFile:filePath];

    

    //使用工具,将data反归档为person对象

    NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:readData];

    

    //解码

    Person * p = [unarchiver decodeObjectForKey:@"person"];

    

    [unarchiver finishDecoding];

    

    NSLog(@"name = %@ age = %ld",p.name,p.age);

    

    [unarchiver release];

 

iOS 数据持久化,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。