一、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同步设备时会备份该目录