美文网首页
iOS运行时归档与解档

iOS运行时归档与解档

作者: _moses | 来源:发表于2017-08-10 15:59 被阅读2615次

相较于NSUserDefaults和NSFileManager,归档解档可以存储model模型。比如平时项目最常用的归档解档就是保存用户相关信息

1.新建一个基类MSModel

#import <Foundation/Foundation.h>

@interface MSModel : NSObject <NSCoding>

@end
#import "MSModel.h"
#import <objc/runtime.h>

@implementation MSModel

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        u_int count;
        objc_property_t *properties = class_copyPropertyList([self class], &count);
        for (int i = 0; i < count; i++) {
            const char *propertyName = property_getName(properties[i]);
            NSString *key = [NSString stringWithUTF8String:propertyName];
            [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
        }
        free(properties);
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder {
    u_int count;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i < count; i++) {
        const char *propertyName = property_getName(properties[i]);
        NSString *key = [NSString stringWithUTF8String:propertyName];
        [aCoder encodeObject:[self valueForKey:key] forKey:key];
    }
    free(properties);
}

@end

2.以后创建需要缓存的模型就继承自MSModel即可实现缓存的目的

#import "MSModel.h"

@interface CacheModel : MSModel

@property (nonatomic, copy, nullable) NSString *name;
@property (nonatomic, copy, nullable) NSString *ID;
@property (nonatomic, assign) NSInteger *age;
@property (nonatomic, assign) BOOL gender;

@end

3.在控制器中实现缓存

// 归档
CacheModel *model = [CacheModel new];
model.name = @"moses";
model.ID = @"10086";
model.age = 18;
model.gender = 1;
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"cache001"];
[NSKeyedArchiver archiveRootObject:model toFile:filePath];
// 解档
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"cache001"];
CacheModel *model = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"%@--%@--%d--%d", model.name, model.ID, model.age, model.gender);

相关文章

  • ios中Swift的归档与解档

    ios中Swift的归档与解档 归档 解档 init()方法 设置属性

  • iOS运行时归档与解档

    相较于NSUserDefaults和NSFileManager,归档解档可以存储model模型。比如平时项目最常用...

  • ios 归档与解档

    将对象进行归档或者解档时,需要遵循NSCoding协议,对象必须实现encodeWithCoder方法和initW...

  • 浅谈iOS本地存储

    iOS本地存储方式有很多种,比如:NSUserDefault,Plist文件存储,CoreData,解档与归档,沙...

  • runTime

    iOS runtime讲解,并且用runtime动态归档与解档 (2015-09-30 22:42:02)转载▼ ...

  • iOS运行时实现归档解档

    一、什么是运行时(Runtime)? runtime是一套比较底层的纯C语言的API,runtime就是一个库,一...

  • iOS归档解档

    归档与解档是iOS中序列化与反序列化的方式,需要实现 encodeWithCoder 和 initWithCode...

  • 归档与解档

    归档:将对象按照一定的格式保存到文件中;解档:从文件中还原对象的过程 官方类的归档与解档方式一: 官方类的归档与解...

  • iOS---归档与解档

    /*iOS归档小结:1.归档实际上就是一种文件保存的形式,几乎所有的对象都能够被归档存储。它使用NSKeyedAr...

  • IOSRunTime_OC的序列化

    利用RunTime运行时,遍历一个类的所有属性和方法。 序列化-----归档 反序列化--解档 在iOS中一个自定...

网友评论

      本文标题:iOS运行时归档与解档

      本文链接:https://www.haomeiwen.com/subject/fpcqrxtx.html