您的位置:首页 > 移动开发 > IOS开发

iOS数据存储的常用方式

2015-08-27 16:56 351 查看
一、XML属性列表(plist)归档

使用对象仅仅是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同步设备时会备份该目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 数据存储