iOS 数据存储方式(XML属性列表-plist)

来源:互联网 发布:大数据预测彩票 编辑:程序博客网 时间:2024/05/17 02:51

一. iOS 开发中的数据存储有以下几种方式:

1.plist (XML属性列表归档)

2.偏好设置

3.NSKeydeArchiver 归档 (存储自定义对象/模型)

4.SQLite3 (数据库, 关系型数据库, 不能直接存储对象,要编写一些数据库的语句,将对象拆开存储)

5.CoreData (对象型的数据库, 把内部环节屏蔽)


二.这些数据都存储应用沙盒中

每个iOS应用都有⾃己的应⽤沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应⽤必须待在⾃己的沙盒里,其他应用不能访问该沙盒.

可以通过 NSLog(@"%@",NSHomeDirectory());打印出应用的沙盒地址,然后在 Finder 中前往文件夹进行查看,文件夹目录如下图:


三.应用沙盒结构分析

应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 

Documents:保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录

tmp:保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录 

Library/Caches:保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。⼀一般存储体积大、不需要备份的非重要数据 

Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置) 应⽤会在该⺫录中查找应⽤的设置信息。iTunes同步设备时会备份该目录 


四.属性列表

● 属性列表是一种XML格式的文件,拓展名为plist 

● 如果对象是NSString、NSDictionary、NSArray、NSData、 NSNumber等类型,就可以使用writeToFile:atomically:⽅法 直接将对象写到属性列表文件中 


五.plist 数据保存的代码示范:

// 存数据

- (IBAction)save:(id)sender

{


    // dict---------------------------

    // 获取doc的路径

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

   // 文件的路径

    NSString* filePath = [docPathstringByAppendingPathComponent:@"xx.plist"];


   // 自定义的对象不能保存到plist

    Person *p = [[Person alloc] init];

    p.name =@"lnj";

    

    NSDictionary* dict = @{ @"key" : @"value",

        @"123" : @"321"};

    [dict writeToFile:filePath atomically:YES]; // 线程安全的


/*

    plist只能存储系统自带的一些常规的类,也就是有writeToFile方法的对象才可以使用plist保存数据

     字符串/字典/数据/NSNumber/NSData ...

     */


    // array---------------------------


    //    //获取doc的路径

    //    NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    //    //文件的路径

    //    NSString* filePath = [docPath stringByAppendingPathComponent:@"xx.plist"];

    //

   //    NSArray* array = @[ @"德莱厄斯", @"德玛西亚", @"123" ];

    //    // 1.如果做plist存储 :write to file

    //    [array writeToFile:filePath atomically:YES];

}


// 取数据

- (IBAction)read:(id)sender

{


    // dict---------------------------

    // 获取doc路径

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

   // 文件的路径

    NSString* filePath = [docPathstringByAppendingPathComponent:@"xx.plist"];


    NSDictionary* dict = [NSDictionarydictionaryWithContentsOfFile:filePath];


    NSLog(@"%@", dict);


    // array---------------------------


    //    //获取doc的路径

    //    NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    //    //文件的路径

    //    NSString* filePath = [docPath stringByAppendingPathComponent:@"xx.plist"];

    //

    //    NSArray* array = [NSArray arrayWithContentsOfFile:filePath];

    //    NSLog(@"%@", array);

}



0 0
原创粉丝点击