iOS数据存储的常用方式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值