使用runtime动态为category添加属性

当我们使用类别category有时候想自己增加一些属性,平常的做法办不到,又不想用继承类,耦合度太高,这时候runtime的强大之处就体现出来啦。废话不多说上代码


UIView+MyView.h



UIView+MyView.m

写了一个UIView的category,UIView+MyView。在h文件添加两个属性,在m文件实现setter和getter方法。关键在setter和getter方法。

首先要使用runtime的方法,先导入头文件#import<objc/runtime.h>。

先说setter方法,使用到了objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)。有四个参数

第一个<#id object#>是要添加属性的对象,这里就是自己self

第二个<#const void *key#>关键字选择器,就是通过这个关键字的方法找到对象的哪个属,就是给这个对象绑定一个对应的key字段,常用一个static字符串常量,或者用@selector(属性名)也行

第三个<#id value#>值,就是给属性设置你想设置的值

第四个<#objc_AssociationPolicy policy#>策略,属性的关联策略,retain还是assign

再说getter方法,objc_getAssociatedObject(<#id object#>, <#const void *key#>)。有两个参数

第一个<#id object#>是要添加属性的对象,这里就是自己self

第二个<#const void *key#>关键字选择器,就是通过这个关键字的方法找到对象的哪个属,要和objc_setAssociatedObject设置的绑定的key对应。

注意,第二个关键字可传 _cmd,代表方法名本身。每一个方法内都有一个_cmd,表示方法自身。

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,757评论 0 9
  • 清早 打了一个喷嚏 浓妆素裹 把它放进了朋友圈里 您的喷嚏 如风 轻轻扯开冬的序 您的喷嚏 如雨 盈润了雪的诗句 ...
    d911533756b3阅读 116评论 0 0
  • #幸福是需要修出来的~每天进步1%~幸福实修11班/14蒋春燕~江苏 20170906 【幸福三朵玫瑰】 今日3朵...
    蒋春燕阅读 238评论 2 2
  • UIButton *signBtn = [UIButton buttonWithType:UIButtonType...
    VincentHK阅读 439评论 0 0