美文网首页
用runtime归档、解档、copy

用runtime归档、解档、copy

作者: 路灯下的黑猫H | 来源:发表于2017-03-16 14:37 被阅读0次

    我先定义一个TestModel

    //

    //ViewController.m

    //CocoTest_1

    //

    //Created by S u p e r m a n on 2017/3/14.

    //Copyright © 2017年张浩. All rights reserved.

    //

    #import"ViewController.h"

    //

    //TestModel.h

    //runTime

    //

    //Created by apple on 16/5/27.

    //Copyright © 2017年张浩. All rights reserved.

    //

    #import

    #import

    @interfaceTestModel :NSObject

    @property(nonatomic,assign)floatheight;

    @property(nonatomic,strong)NSArray* dataArr;

    @property(nonatomic,retain)NSArray* dataArr1;

    @property(nonatomic,copy)NSString* name;

    @property(nonatomic,retain)NSString* name2;

    - (instancetype)initWithDict:(NSDictionary*)dict;

    @end

    //

    //TestModel.m

    //runTime

    //

    //Created by apple on 16/5/27.

    //Copyright © 2017年张浩. All rights reserved.

    //

    #import"TestModel.h"

    @implementationTestModel

    - (instancetype)initWithDict:(NSDictionary*)dict {

    if(self= [superinit]) {

    //1.获取类的属性及属性对应的类型

    NSMutableArray* keys = [NSMutableArrayarray];

    NSMutableArray* attributes = [NSMutableArrayarray];

    //获得底层的属性列表

    unsignedintoutCount =0;

    objc_property_t*propertyList =class_copyPropertyList([selfclass], &outCount);

    for(inti =0; i

    objc_property_tproperty = propertyList[i];

    constchar*key =property_getName(property);

    constchar*attribute =property_getAttributes(property);

    [keysaddObject:[NSStringstringWithCString:keyencoding:NSUTF8StringEncoding]];

    [attributesaddObject:[NSStringstringWithCString:attributeencoding:NSUTF8StringEncoding]];

    }

    free(propertyList);

    //通过keys来赋值

    for(NSString* keyinkeys) {

    if(dict[key]) {

    [selfsetValue:dict[key]forKey:key];

    }

    }

    free(ivars);

    }

    returnself;

    }

    //解档

    /*

    *通过归档来初始化,也就是把这个归档来解出来

    **/

    - (id)initWithCoder:(NSCoder*)aDecoder {

    if(self= [superinit]) {

    unsignedintoutCount =0;

    Ivar* ivars =class_copyIvarList([selfclass], &outCount);

    for(inti =0; i

    Ivarivar = ivars[i];

    NSString* key = [NSStringstringWithUTF8String:ivar_getName(ivar)];

    [selfsetValue:[aDecoderdecodeObjectForKey:key]forKey:key];

    }

    free(ivars);

    }

    returnself;

    }

    /*

    *归档

    **/

    - (void)encodeWithCoder:(NSCoder*)aCoder {

    unsignedintoutCount;

    Ivar* ivars =class_copyIvarList([selfclass], &outCount);

    for(inti =0; i < outCount; i ++) {

    Ivarivar = ivars[i];

    NSString* key = [NSStringstringWithUTF8String:ivar_getName(ivar)];

    [aCoderencodeObject:[selfvalueForKey:key]forKey:key];

    }

    }

    /*

    实现copy协议

    **/

    - (id)copyWithZone:(NSZone*)zone {

    idcopy = [[[selfclass]allocWithZone:zone]init];

    unsignedintoutCount;

    Ivar* ivars =class_copyIvarList([selfclass], &outCount);

    for(inti =0; i < outCount; i ++) {

    Ivarivar = ivars[i];

    NSString* key = [NSStringstringWithUTF8String:ivar_getName(ivar)];

    idvalue = [selfvalueForKey:key];

    [copysetValue:valueforKey:key];

    }

    free(ivars);

    returncopy;

    }

    @end

    相关文章

      网友评论

          本文标题:用runtime归档、解档、copy

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