OC序列化

来源:互联网 发布:舒适图标知乎 编辑:程序博客网 时间:2024/06/11 02:41

//

//  Person.m

//  --OC序列化

//  Copyright © 2017 TZ. All rights reserved.

//  Runtime眼里没有私有!!!


#import "Person.h"

#import <objc/message.h>



@interface Person()



@end


@implementation Person


- (void)encodeWithCoder:(NSCoder *)coder

{

    unsignedint count = 0;

    Ivar * ivars =class_copyIvarList([Personclass], &count);

    for (int i =0; i < count; i++) {

        //拿出属性的名称

        Ivar ivar = ivars[i];

        constchar * name = ivar_getName(ivar);

        NSString * KEY = [NSStringstringWithUTF8String:name];

        //取出属性的值

        id value = [selfvalueForKey:KEY];

        //归档

        [coder encodeObject:valueforKey:KEY];

    }

    

    //c语言里面需要释放指针!!

    free(ivars);

}


//解档!!

- (instancetype)initWithCoder:(NSCoder *)coder

{

    self = [superinit];

    if (self) {

        unsignedint count = 0;

        Ivar * ivars =class_copyIvarList([Personclass], &count);

        for (int i =0; i < count; i++) {

            //拿出属性的名称

            Ivar ivar = ivars[i];

            constchar * name = ivar_getName(ivar);

            NSString * KEY = [NSStringstringWithUTF8String:name];

            //解档

            id value = [coderdecodeObjectForKey:KEY];

            //将值设置到属性上 KVC

            [selfsetValue:value forKey:KEY];

        }

        

        //c语言里面需要释放指针!!

        free(ivars);

    }

    returnself;

}


@end


原创粉丝点击