美文网首页
iOS 5种数据存储

iOS 5种数据存储

作者: 绍清_shao | 来源:发表于2020-04-20 17:45 被阅读0次

1.归档解档

归档
let user = User()
let data = NSMutableData()
let archive = NSKeyedArchiver(forWritingWith: data)
archive.encode(user, forKey: "user1Key")
archive.finishEncoding()
// 归档到指定位置
let filePath = NSHomeDirectory() + "/Documents/contacts.data"
data.write(toFile: filePath, atomically: true)
解档
let fileData = NSMutableData(contentsOfFile: filePath)
let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
let saveUser = unarchiver.decodeObject(forKey: "user1Key") as! User
unarchiver.finishDecoding()

2.NSUserDefaults

时候存储少量基本数据类型,比如Array、Bool、String

1// 以键值方式存储
2  [[NSUserDefaults standardUserDefaults] setObject:@"value" forKey:@"key"];
3// 以键值方式读取
4  [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];

3.写入file方式

时候写入数据比较大的情况

1  // 将 NSData 类型对象 data 写入文件, 文件名为 FileName
2  [data writeToFile:FileName atomically:YES];
3  // 从 FileName 中读取出数据
4  NSData  *data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];

4.SQLite

适合数据小
采用 SQLite 数据库来存储数据

 1  // 打开数据库
 2  if (sqlite3_open([databaseFilePath UTF8String],   &database)==SQLITE_OK) {
 3      NSLog(@"sqlite dadabase is opened."); 
 4  } else { return;}// 打开不成功就返回
 5
 6  // 在打开了数据库的前提下, 如果数据库没有表, 那就开始建表了哦!
 7  char *error;
 8  const char *createSql="create table(id integer primary key autoincrement, name text)"; if (sqlite3_exec(database, createSql, NULL, NULL, &error)==SQLITE_OK) {
 9      NSLog(@"create table is ok."); 
10  } else {
11      sqlite3_free(error);// 每次使用完毕清空 error 字符串, 提供给下⼀一次使用 
12  }
13
14  // 建表完成之后, 插入记录
15  const char *insertSql="insert into a person (name) values(‘gg’)";
16  if (sqlite3_exec(database, insertSql, NULL, NULL, &error)==SQLITE_OK) {
17      NSLog(@"insert operation is ok."); 
18  } else {
19      sqlite3_free(error);// 每次使用完毕清空 error 字符串, 提供给下一次使用 
20  }

映射mmap

文件映射是读取大型文件的有效方法

文件映射是将与文件相关的磁盘扇区映射到进程的虚拟内存空间的过程。当你计划频繁地以随机顺序读取一个大文件的小部分时,映射是最合适的。只将需要的部分映射到内存中,比从磁盘上反复读取或重读这些部分要有效得多。对于你打算按顺序读取的文件,映射的好处不大。

PS: 映射到内存中的文件越多,文件映射的作用就越小。
目的:减少内存和磁盘的空间交换

应用

  1. 写入性能要求高,crash前能把日志写入磁盘
  2. 有一个大文件,其内容要随机访问一次或多次。
  3. 有一个小文件,其内容想一次性全部读入内存并频繁访问。这种技术最适合于大小不超过几个虚拟内存页的文件。

不适应mmap的情况

  1. 你想从头到尾依次读取一个文件,只读一次。

相关文章

  • iOS数据存储

    iOS数据存储 数据存储

  • iOS数据库存储之SQLite3

    资源连接: iOS数据库存储之SQL语句; iOS数据存储之文件沙盒; iOS数据存储之NSCoding; SQL...

  • iOS数据存储之文件沙盒

    资源连接: iOS数据库存储之SQL语句; iOS数据库存储之SQLite3; iOS数据存储之NSCoding;...

  • iOS数据存储之NSCoder

    资源连接: iOS数据库存储之SQL语句; iOS数据库存储之SQLite3; iOS数据存储之文件沙盒; iOS...

  • iOS数据库存储之SQL语句

    资源连接: iOS数据库存储之SQLite3; iOS数据存储之文件沙盒; iOS数据存储之NSCoding; S...

  • iOS-12 数据存储

    1iOS数据存储之Core Data(一) - 简书 2iOS数据存储之归档 - 简书 3iOS数据存储之偏好设置...

  • iOS项目中CoreData的使用

    一、iOS数据储存方式 二、简介CoreData数据存储Core Data 是 iOS系统提供的数据存储方式,和传...

  • iOS数据存储--数据库

    iOS中数据存储方式 iOS中数据存储方式主要有以下几种 Plist NSUserDefaults NSCodin...

  • 沙盒机制

    IOS数据存储之文件沙盒存储

  • iOS基础之数据存储

    iOS数据存储 1. 概论 在iOS开发中数据存储的方式可以归纳为两类: 存储文件 和 存储到数据库. 2.文件存...

网友评论

      本文标题:iOS 5种数据存储

      本文链接:https://www.haomeiwen.com/subject/xjmdihtx.html