runtime 对category的应用
2016-10-27 本文已影响0人
wlwl123
简述
category 规定是不能添加存储属性,即带有set方法的属性,通过runtime可以打破这一限制。
具体代码
- 1 添加存储属性
@interface UIButton (YX)
@property (nonatomic) NSString *name;
@end```
* 2 重写
- (void)setName:(NSString *)name{
//绑定参数1对象的参数3的值 到 参数2的 key上, 这个值的内存管理方式 由参数4来决定
//参数2: 需要是一个唯一值
//写法有两种, static void *pp = &pp;
//写法2 直接拿 get方法的指针
objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}```
- 3 重写get方法
- (NSString *)name{
//_cmd 是 当前方法的指针
return objc_getAssociatedObject(self, _cmd);
}
突破限制成功,Xcode不会报错了