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