用runtime归档、解档、copy

我先定义一个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容