Category 添加 property
一开始Google了解到在iOS开发中的Category是不可以添加property的,via:StackOverFlow,其实当时我是信的,但是后来发现在别的开源代码中
readonly
属性的property能够在运行时给它们赋值操作,借助于Objective-C Runtime中的关联
,所谓关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
两个主要方法
id objc_getAssociatedObject ( id object, const void *key );
void objc_setAssociatedObject ( id object, const void *key, id value, objc_AssociationPolicy policy );
使用方法
- (NSString *)aString {
return objc_getAssociatedObject(self, @selector(aString));
}
- (void)setaString:(NSString *)aString {
objc_setAssociatedObject(self, @selector(aString), otherString, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
其他注意
- 对于基本类型如NSInteger、BOOL的
assign
类型property,可以先转成NSNumber来设置关联,获取关联对象返回的时候再转回对应类型 - 注意
OBJC_ASSOCIATION_ASSIGN
等等的几个属性设置