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

本文介绍了iOS开发中的五种数据存储方式:plist/XML属性列表归档、偏好设置、NSKeyedArchiver归档、SQLite3数据库及CoreData,并详细分析了应用沙盒结构,包括各目录的作用及存储内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 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 = [docPath stringByAppendingPathComponent:@"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 = [docPath stringByAppendingPathComponent:@"xx.plist"];


    NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile: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);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值