//
// TestModel.h
// Test
//
// Created by 路灯下的黑猫 on 2018/9/27.
// Copyright © 2018年 张浩. All rights reserved.
//
#import
#import
NS_ASSUME_NONNULL_BEGIN
@interfaceTestModel : NSObject
@property (nonatomic,assign) float height;
@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
NS_ASSUME_NONNULL_END
//
// TestModel.m
// Test
//
// Created by 路灯下的黑猫 on 2018/9/27.
// Copyright © 2018年 张浩. All rights reserved.
//
#import "TestModel.h"
@implementation TestModel
- (instancetype)initWithDict:(NSDictionary *)dict {
if(self= [superinit]) {
//1.获取类的属性及属性对应的类型
NSMutableArray * keys = [NSMutableArray array];
NSMutableArray * attributes = [NSMutableArray array];
//获得底层的属性列表
unsignedintoutCount =0;
objc_property_t *propertyList = class_copyPropertyList([selfclass], &outCount);
for(inti =0; i
objc_property_t property = propertyList[i];
constchar*key = property_getName(property);
constchar*attribute = property_getAttributes(property);
[keys addObject:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]];
[attributes addObject:[NSString stringWithCString:attribute encoding:NSUTF8StringEncoding]];
}
free(propertyList);
//通过keys 来赋值
for(NSString * keyinkeys) {
if(dict[key]) {
[selfsetValue:dict[key] forKey:key];
}
}
}
return self;
}
//解档
/*
* 通过归档来初始化,也就是把这个归档来解出来
**/
- (id)initWithCoder:(NSCoder *)aDecoder {
if(self= [superinit]) {
unsignedintoutCount =0;
Ivar * ivars = class_copyIvarList([selfclass], &outCount);
for(inti =0; i
Ivar ivar = ivars[i];
NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];
[selfsetValue:[aDecoder decodeObjectForKey:key] forKey:key];
}
free(ivars);
}
return self;
}
/*
* 归档
**/
- (void)encodeWithCoder:(NSCoder *)aCoder {
unsignedintoutCount;
Ivar * ivars = class_copyIvarList([selfclass], &outCount);
for(inti =0; i < outCount; i ++) {
Ivar ivar = ivars[i];
NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];
[aCoder encodeObject:[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 ++) {
Ivar ivar = ivars[i];
NSString * key = [NSString stringWithUTF8String:ivar_getName(ivar)];
idvalue = [selfvalueForKey:key];
[copy setValue:value forKey:key];
}
free(ivars);
returncopy;
}
@end