runtime 对category的应用

简述

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不会报错了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容