iOS开发之数据持久化 --NSKeydeArchiver归档

一、沙盒

每个iOS应用都有⾃己的应⽤沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应⽤必须待在⾃己的沙盒里,其他应用不能访问该沙盒。

 Documents: 保存应⽤运行时生成的需要持久化的数据 存储跟用户相关的文件,  用户的一些文本信息, 最好不要存储空间占用比较大的文件比如视频/音频等等.


 library: 给开发者使用的 用来存储一些东西的文件夹
library//caches: 缓存文件夹, 用户看过的一些图片, 音频, 视频, 都可以存储在这个文件夹中, 一般清空缓存就是清除这个文件夹的所有内容
library//preferences: 给开发者存储一些内容,NSUserDefaults保存的信息都在这个文件夹中


temp: 临时文件夹, 存储网络请求过程中的一些临时文件 app版本更新的时候, 会直接清空tmp文件夹。

二、NSKeydeArchiver归档

自定义对象进行归档处理,对象的属性要求:为基本数据类型(int或float)或者属性为实现了NSCoding协议类的实例。              

 1. 拼接一个存储路径
系统提供了一个函数(利⽤NSSearchPathForDirectoriesInDomains函数), 可以直接返回某个沙盒文件夹的路径
// 返回值: 找到的路径组成的数组, 如果搜索的时系统的沙盒文件夹路径,数组中只有一个元素
// 参数1: 搜索沙盒中的那个文件夹
// 参数2: 搜索的范围
// 参数3: 返回的时相对路径还是绝对路径 ,NO 相对路径 (给我们看到的)  YES 绝对路径(给系统看的)

    NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 

取出documents文件夹路径
NSString *docPath = [arr firstObject];

a. 创建BOSS类

Boss.h中

// nscoding协议, 把一个类中的所有数据进行整体的编码, 方便进行文件读取操作
@interface Boss : NSObject<NSCoding>
@property (nonatomic, retain)NSString *name;
@property (nonatomic, retain)NSString *sex;
@property (nonatomic, retain)NSString *number;
@end
Boss.m中

#import "Boss.h"

@implementation Boss

// 编码的方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    // 对每个属性都进行标记, 用于在读取数据的时候进行恢复
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
    [aCoder encodeObject:self.number forKey:@"number"];
    [aCoder encodeObject:self.name forKey:@"name"];
}

// 解码的方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        // 每次都按照之前给定的key 给对应的属性赋值
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
        self.number = [aDecoder decodeObjectForKey:@"number"];

    }
    return self;
}


 b.  创建boss对象

    Boss *boss = [[Boss alloc] init];
    boss.name = @"老管";
    boss.sex = @"男";
    boss.number = @"1";

// 将复杂对象写入本地的工具
// 参数1: 要写入本地的对象
// 参数2: 写入本地的路径
 NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.txt"];
c. 归档类

 BOOL result = [NSKeyedArchiver archiveRootObject:boss toFile:bossPath];
 NSLog(@"%d", result);
 [boss release];


d.反归档类

Boss *bossReturn = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];
NSLog(@"%@", bossReturn.name);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值