一般分类(Category)是不允许添加属性的,只能进行方法的扩展,分类中不会自动生成set和get方法,更不会出现_object这样的属性名。运行时能帮我们解决这个问题,自己添加set和get的方法。本文将介绍对象属性和基本类型属性两种运行时代码的添加。(其实只需要把基本类型转换为对象就可以了)
都是要在.m文件中添加运行时头文件的。
#import
1、对象属性的添加:
@property(nonatomic,strong)NSString* test;
static char* testStr = "TESTSTR";
运行时的set和get代码:
- (void)setTest:(NSString *)test{
objc_setAssociatedObject(self, testStr, test, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)test{
return objc_getAssociatedObject(self, testStr);
}
2、基本类型添加
@property(nonatomic,assign)int weight11;
static char strKey = 'k';
- (int)weight11{
return [objc_getAssociatedObject(self, &strKey) intValue];
}
- (void)setWeight11:(int)weight11{
return objc_setAssociatedObject(self, &strKey, @(weight11), OBJC_ASSOCIATION_ASSIGN);
}
好了,用法就是这样,至于想了解内部,慢慢来吧。