ios:数据持久化的几种方法浅谈
2015-10-06 20:09
375 查看
今天我们来聊聊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];
说到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:@"
相关文章推荐
- IOS的归档小总结
- iOS创建、删除文件夹、获取沙盒路径
- iOS 数据持久化之覆盖式存储(Plist ,Preference,归档)
- iOS解析html
- ios:点击一个button不断切换背景图片
- iOS常用设计模式:MVC、单例、代理、观察者。
- IOS 解析XML--使用NSXML
- iOS:多线程同步加锁的简单介绍
- IOS 高德地图
- iOS 代理传值
- IOS 提交审核,Missing Push Notification Entitlement
- ios图片压缩
- iOS之 LLDB调试常用命令
- ios 本地通知
- iOS中的定时器
- iOS 使用MJRefresh刷新
- iOS中的(null) <null> nil 问题
- 关于ios9中得ALAssetsLibrary框架过时问题
- iOS开发小项目之找色块游戏
- 关于ios8中CMStepCounter过时的问题