iOS面试经常会被问到:你有用过Runtime吗? 使用Runtime做过什么?
开发中我们会经常使用分类,知道分类中只能添加方法,不能添加属性。今天我们就用Runtime来给分类添加属性。
- 创建一个类HTFather, 没有任何属性。
@interface HTFather : NSObject
@end
- 给HTFather添加一个分类,并添加一个name的属性
@interface HTFather (Extention)
@property (copy, nonatomic) NSString *name;
@end
在.m中利用runtime绑定
@implementation HTFather (Extention)
static char *modelNameKey = "htModelNameKey";
-(void)setName:(NSString *)name
{
objc_setAssociatedObject(self, modelNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString *)name{
return objc_getAssociatedObject(self, modelNameKey);
}
@end
- 测试HTFather是否有了name属性
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
HTFather *father = [[HTFather alloc] init];
father.name = @"Father";
}
总结
添加属性的核心函数就是objc_setAssociatedObject和objc_getAssociatedObject。
上传代码到gitHub , 如果你喜欢我的文章,记得star,给予我继续写作的动力。