我先定義一個(gè)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.獲取類(lèi)的屬性及屬性對(duì)應(yīng)的類(lèi)型
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);
//通過(guò)keys來(lái)賦值
for(NSString* keyinkeys) {
if(dict[key]) {
[selfsetValue:dict[key]forKey:key];
}
}
free(ivars);
}
returnself;
}
//解檔
/*
*通過(guò)歸檔來(lái)初始化策橘,也就是把這個(gè)歸檔來(lái)解出來(lái)
**/
- (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];
}
}
/*
實(shí)現(xiàn)copy協(xié)議
**/
- (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