Objective-C 数据持久化

简介

在开发通常需要我们把一些数据存储在本地,这篇我们来介绍iOS中数据持久化得方法。

  • 1.属性列表

  • 2.对象归档

  • 3.偏好设置

  • 4.嵌入式数据库(SQLite3)

  • 5.苹果公司提供的持久化工具 Core Data

以下我们围绕这4种方式逐一介绍,在上一遍种我们介绍了“沙盒”和文件管理的基础知识,我们将以上一篇为基础进行介绍后面内容

1.属性列表

属性列表(plist),指定应用的配置比如tabbar的状态,黑白名单,网络请求ATS等等。我们可以通过Xcode或者Property List Editor手动编辑。并且只要字典或数组包含特定可序列化对象就可以将NSDictionary和NSArray实例写入属性列表或者创建。

序列化对象(serialized object)是指可以被转换为字节流以便于存储到文件中或者通过网络进行传输的对象。

可以被序列化得Objective-C类:

NSArray;
NSMutableArray;
NSDictionary;
NSMutableDictionary;
NSData;
NSMutableData;
NSString;
NSMutableString;
NSNumber;
NSDate;

我们按照上一篇中的方法获取需要存取的目录然后执行保存和读取的操作

//获取路径
 NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString *fileName = [path stringByAppendingPathComponent:@"test.plist"];

//保存数组
NSArray *array = @[@"Gavin", @"Alice", @"Lucy"];
[array writeToFile:fileName atomically:YES];

//读取信息
NSArray *result = [NSArray arrayWithContentsOfFile:fileName];

atomically:参数让该方法将数据写入辅助文件,而不是写入指定位置。成功写入该文件之后,辅助文件将被复制到第一个参数指定的位置,这是更安全的写入文件的方法,如果应用在保存期间崩溃,则现有文件不会被破坏。

属性列表中只能将一小部分对象存储,我们来看看比较强大的方法。

2.对象归档

我们先来介绍一些基础的概念:

归档(archiving):是另一种形式的序列化,它可以在任何对象进行序列化,编写用于保存数据,可以轻松的将复杂的对象写入文件,然后再从中读取他们。

实现对象归档,都应该遵循NSCoding协议同时还应该遵循NSCopying协议,NSCopying可以允许复制对象,由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

NSCoding协议

NSCoding协议声明了两个方法,也就是归档和解码。归档将一个对象编码到归档中,解码对归档解码来创建一个新对象。我们通过下面的例子来了解

  @interface Person : NSObject  
  @property (nonatomic, copy) NSString *name;
  @property (nonatomic, assgin) NSInteger age;
  @end
 //归档
  - (void)encodeWithCoder:(NSCoder *)aCoder {
      [aCoder encodeObject:self.name forKey:@"name"];
      [aCoder encodeInteger:self.age forKey:@"age"];
  }
//解档
  - (id)initWithCoder:(NSCoder *)aDecoder {
      if ([super init]) {
          self.name = [aDecoder decodeObjectForKey:@"name"];
          self.age = [aDecod
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值