最近做项目过程中用到了iOS的本地存储,今天大概简述一下iOS中经常遇到的本地存储,大概可分为几个:

  • NSUserDefaults (开发中用到的最多的)
  • 归档
  • Keychain
  • plist存储
  • SQLite3
  • CoreData

下面大概介绍下这几个:


1.NSUserDefaults

NSUserDefaults适合存储轻量级的本地数据,支持的数据类型有:NSNumber,NSString,NSDate,NSArray,NSDictionary,BOOL,NSData.其实NSUserDefaults存储最终也是以plist形式来存储的,其沙盒路径为 Library/Preferences。


2.归档

归档主要是作用于自定义的对象或者对象存储的,自定义对象要实现NSCoding协议,也就是要重写归档和解档方法:

- (instancetype)initWithCoder:(NSCoder *)coder;
- (void)encodeWithCoder:(NSCoder *)coder;

归档实现主要是通过NSKeyedArchiver来实现的,具体实现方法可以查看对应的API.有存储一个和多个的方法。


3.Keychain

Keychain是苹果系统提供一种安全的存储敏感信息的工具,比如用户访问应用程序/网站 服务器的口令。此外,用于认证的证书,密钥,和身份信息,也可以存储在Keychain中,Keychain Services 的安全机制保证了存储这些敏感信息不会被窃取。其特点有几个:

  • 数据并不存放在App的Sandbox中,即使删除了App,资料依然保存在keychain中。如果重新安装了app,还可以从keychain获取数据
  • keychain的数据可以通过group方式,让程序可以在App间共享。不过得要相同TeamID
  • keychain的数据是经过加密的


4.plist存储

plist文件主要是存在沙盒中的Documents中,通过文件名去获取,一般存储的类型是数组或者字典的形式。代码如下:

// 存
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];
    
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"hello" forKey:@"name"];
[dict writeToFile:filePath atomically:YES];
// 取
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];
    
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"===%@",dic);

剩下的SQLite3和CoreData我们放到下一篇说。。。。未完待续。。。。。