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: 映射到内存中的文件越多,文件映射的作用就越小。
目的:减少内存和磁盘的空间交换
应用
- 写入性能要求高,crash前能把日志写入磁盘
- 有一个大文件,其内容要随机访问一次或多次。
- 有一个小文件,其内容想一次性全部读入内存并频繁访问。这种技术最适合于大小不超过几个虚拟内存页的文件。
不适应mmap的情况
- 你想从头到尾依次读取一个文件,只读一次。
网友评论