iOS数据存储

iOS数据存储方式

  • Preference(偏好设置)
  • 写入式(plist(XML属性列表归档));
  • NSKeyedArchiver归档(NSCoding)
  • 数据库(SQLite3)存储 (关系型数据库);
  • Core Data(对象型的数据库);

应用沙盒

结构:
  • Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
  • tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
  • Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
  • Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录

偏好设置

  • 偏好设置可以存储的数据类型:存储基本数据类型(NSData、NSString、 NSNumber、NSDate、NSArray、NSDictionary),不可以存储自定义对象;
  • 存储位置:Library/Preferences文件夹下;
 if (json != nil) {
// 存储
 [[NSUserDefaults standardUserDefaults] setObject:json forKey:YANForumTitles];
 } else{
// 读取
 forum.titles = [YANTagTitle mj_objectArrayWithKeyValuesArray:[[NSUserDefaults standardUserDefaults]objectForKey:YANForumTitles]];
  }

写入式(plist-XML属性列表归档)

  • 存储的数据类型为:存储基本数据类型(NSData、NSString、 NSNumber、NSDate、NSArray、NSDictionary),不可以存储自定义对象;
    // 系统路径
    NSString *DocuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 拼接文件路径
    NSString *path = [DocuPath stringByAppendingPathComponent:@"liuyan.plist"];
    // 写入
    [json writeToFile:path atomically:YES];
    // 读取并转化为模型
    forum.titles=[YANTagTitle mj_objectArrayWithKeyValuesArray:[NSArray arrayWithContentsOfFile:path]];

归档(NSKeyedArchiver)

  • 如果想将一个自定义对象保存到文件中必须实现NSCoding协议
  • 存储的数据类型:不仅可以存储基本的数据类型,还可以存储自定义对象;
    // 系统路径
    NSString *DocuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 拼接文件路径
    NSString *path = [DocuPath stringByAppendingPathComponent:@"titles.liuyan"];
    // 写入
    [NSKeyedArchiver archiveRootObject:forum.titles toFile:path];
    // 读取
    for (int i = 0; i < forum.titles.count; i++) {
            YANTagTitle *title=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
    }
  • 设置文件存储属性
    文件存储时为执行:-(void)encodeWithCoder:(NSCoder *)aCoder;
   - (void)encodeWithCoder:(NSCoder *)aCoder
   {
       [aCoder encodeInteger:self.ID forKey:@"ID"];
       [aCoder encodeObject:self.n forKey:@"n"];

  }

读取文件时执行:- (instancetype)initWithCoder:(NSCoder *)aDecoder;

  - (instancetype)initWithCoder:(NSCoder *)aDecoder{
    //注意:在构造方法中需要先初始化父类的方法
       if (self=[super init]) {
           self.ID=[aDecoder decodeIntegerForKey:@"ID"];
           self.n=[aDecoder decodeObjectForKey:@"n"];
       }
    return self;  
}

SQList3

CoreData

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS应用数据存储的常用方式 XML属性列表(plist)归档2.Preference(偏好设置)3.NSKeye...
    清风沐沐阅读 343评论 0 1
  • [TOC] 一、应用的文件结构 I. 应用沙盒 每个iOS应用都有一个 应用沙盒「文件系统目录」,与其他文件系统隔...
    _凉风_阅读 1,655评论 2 8
  • iOS数据存储 持久化存储 概述: 持久化存储——将数据保存在硬盘里,当应用程序重启后可以访问到之前存储的数据。是...
    夏天的风_song阅读 650评论 1 7
  • 本文将对以下几个模块进行总结 下图是Core Data堆栈的图示,在这里是为了做文章的封面图片,后文会介绍Core...
    MR_THT阅读 1,054评论 0 3
  • 文 | 黄小觉 被称为“一半火山一半温泉”的雾岛是真正的雾之岛。由于泉源是流动的,所以若是站在某些高点,你会看到视...
    黄小觉阅读 963评论 0 0