iOS数据存储的常用方式
2015-08-27 16:56
351 查看
一、XML属性列表(plist)归档
使用对象仅仅是Foundation框架中自带的一些类,比如NSString、NSArray、NSDictionary、NSSet、NSNumber、NSData等
二、Preference(偏好设置)
本质还是plist方式存储,不用关心文件夹和文件名,存取简单,但是只能存储到一个文件中(不能存放大批量数据)
三、NSKeyedArchiver归档
能将任何遵守了NSCoding协议的对象存进文件中,如果父类中也有属性要归档或读档,必须调用super的encodeWithCoder:和initWithCoder:方法
四、SQLite3
适用于存储大批量数据,需要写数据库操作代码
五、Core Data
实际是封装了SQLite3,效率低下
应用沙盒结构分析
应用程序包:包含了所有的资源文件和可执行文件
Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
使用对象仅仅是Foundation框架中自带的一些类,比如NSString、NSArray、NSDictionary、NSSet、NSNumber、NSData等
//1.获取沙盒根路径 NSString *home = NSHomeDirectory(); //2.document的路径 NSString *docPath = [home stringByAppendingPathComponent:@"Documents"]; //3.数据存放文件 self.filePath = [docPath stringByAppendingPathComponent:@"data.plist"]; - (IBAction)save { NSArray *data = @[@"jack", @10, @"rose"]; [data writeToFile:self.filePath atomically:YES]; } - (IBAction)read { NSArray *data = [NSArray arrayWithContentsOfFile:self.filePath]; NSLog(@"%@", data); }
二、Preference(偏好设置)
本质还是plist方式存储,不用关心文件夹和文件名,存取简单,但是只能存储到一个文件中(不能存放大批量数据)
//1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preference) NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"yin" forKey:@"name"]; [defaults setInteger:27 forKey:@"age"]; //2.立刻同步 [defaults synchronize]; //3.读取数据 NSString *name = [defaults objectForKey:@"name"]; NSInteger age = [defaults integerForKey:@"age"]; NSLog(@"name:%@ -- age:%ld", name, (long)age);
三、NSKeyedArchiver归档
能将任何遵守了NSCoding协议的对象存进文件中,如果父类中也有属性要归档或读档,必须调用super的encodeWithCoder:和initWithCoder:方法
#import <Foundation/Foundation.h> //遵守NSCoding协议 @interface Person : NSObject<NSCoding> @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger age; @end
#import "Person.h" @implementation Person /** * 将对象归档的时候调用(将对象写入文件之前调用) * 说明1.哪些属性需要存储2.怎样存储这些属性 */ - (void)encodeWithCoder:(NSCoder *)aCoder { //将_name属性值进行编码(会将_name的值存进文件) [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeInteger:_age forKey:@"age"]; } /** * 从文件中解析对象时调用 * 说明1.哪些属性需要解析2.怎样解析这些属性 */ - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { _name = [aDecoder decodeObjectForKey:@"name"]; _age = [aDecoder decodeIntegerForKey:@"age"]; } return self; } @end
- (IBAction)save { Person *p = [[Person alloc] init]; p.name = @"yin"; p.age = 27; NSString *path = @"/Users/frankhou/Desktop/person.data"; [NSKeyedArchiver archiveRootObject:p toFile:path]; } - (IBAction)read { NSString *path = @"/Users/frankhou/Desktop/person.data"; Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; NSLog(@"name:%@ - age:%ld", p.name, (long)p.age); }
四、SQLite3
适用于存储大批量数据,需要写数据库操作代码
五、Core Data
实际是封装了SQLite3,效率低下
应用沙盒结构分析
应用程序包:包含了所有的资源文件和可执行文件
Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 一些关于数据存储和查询优化的想法
- 正确面对服务器数据存储防止数据丢失
- 高性能Javascript笔记 数据的存储与访问性能优化
- 在android开发中进行数据存储与访问的多种方式介绍
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音