今天我们来聊聊ios的几种本地化持久化。我们知道常用的几种数据持久化的方式有 NSUserDefaults;write to file(直接写入本地);归解档(NSKeyedArchiver/NSKeyedUnarchiver);SQLITE;CoreData。。。今天我主要和大家聊聊前三种。
说到ios的本地化一定要说到沙盒机制。
所谓沙盒机制就是它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。有几种获取沙盒路径的方法。
//获取沙盒路径第一种方法
NSString* pathStr = NSUserName();
NSString* homePathStr = NSHomeDirectoryForUser(pathStr);
NSLog(@"home ===== %@",homePathStr);
//第二种
// NSString* homePathStr = NSHomeDirectory();
// NSLog(@"homePathStr ======= %@",homePathStr);
沙盒构成:Document:存储用户数据,需要的备份信息,注意音频视频等很大的数据不能放在这里。看下图。
1.NSUserDefaults
这是种特别轻量级的存储方式。我们一般会在这么几种情况下使用。
a.记录版本信息
b.判断app是否第一次打开
c.用户的账号密码等一些信息
/**
* 使用的时候 只写入一些简单地数据 例如 版本号 是否第一次启动
*/
NSUserDefaults* user = [NSUserDefaults standardUserDefaults];
// 写入数据
[user setObject:@"骨精灵" forKey:@"盘丝洞"];
//读取数据
NSString* string = [user objectForKey:@"盘丝洞"];
是不是很简单哇 哈哈。。
2write to file
一般存入系统的数据类型,比如NSArray;NSDictionary;NSString等等。切记只有遵守NSCoding协议的数据类型才能写入本地,就是这么傲娇。。不多说直接上代码。。。
//简单写入本地
//获取document文件夹的路径
NSString* documentStr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString* str = @"逍遥生";
//创建写入的地址
NSString* path = [documentStr stringByAppendingPathComponent:@"逍遥生.avi"];
//创建写入的地址,后面拼接文件名 如果文件不存在 则会自动创建 记得加/ 上面的不用加 /
// NSString* path = [documentStr stringByAppendingString:@"/逍遥生.avi"];
//atomically原子性 费原子性
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
/**
* 简单写入本地三步走 1⃣️.写入什么 2⃣️.写到哪里去 3⃣️.怎么写进去
*/
NSString* path1 = [documentStr stringByAppendingPathComponent:@"剑侠客.plist"];
NSArray* arr = @[@"大唐官府", @"盘丝洞", @"狮驼岭", @"五庄观"];
[arr writeToFile:path1 atomically:YES];
NSArray* arr1 = [NSArray arrayWithContentsOfFile:path1];
NSLog(@"%@", arr1);
/** * 字典写入本地 *直接写入本地的时候,第一次写入之后,如果再对同一个文件进行写入操作 回覆盖之前的内容 *一次能写入一条数据 如果不像覆盖 先读出来再一起存进去 *所有能写入本地的一定要遵守NSCoding协议 */ NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:@"剑侠客", @"大唐官府",nil]; NSString* path2 = [documentStr stringByAppendingPathComponent:@"梦幻西游.plist"]; [dic writeToFile:path2 atomically:YES]; NSDictionary* dic1 = [NSDictionary dictionaryWithContentsOfFile:path2]; NSLog(@"%@", dic1); NSString* str2 = @"http://img.fs0757.com/news/2015/0901//2015090110400752.jpg"; NSURL* url = [NSURL URLWithString:str2]; NSData* data = [NSData dataWithContentsOfURL:url]; NSString* path3 = [documentStr stringByAppendingPathComponent:@"