当我们使用类别category有时候想自己增加一些属性,平常的做法办不到,又不想用继承类,耦合度太高,这时候runtime的强大之处就体现出来啦。废话不多说上代码
写了一个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,表示方法自身。