开发中,我们常常会给系统提供的类添加分类,在分类里面可以添加方法,以方便我们使用,但是很多人遇到想给分类添加属性的情况,但是会遇到以下问题:
1.当给分类添加属性的时候,系统不会帮你生成该属性对应的setter和getter方法,也不会生成带下划线的成员变量,不过这个属性会出现在属性列表中
2.声明了属性后,我们还是可以在.m文件中给该属性添加setter和getter方法,不过,由于系统不会生成带下划线的成员变量,所以,在这两个方法内也没法直接给该属性赋值
那么,我们怎么样才能给分类添加一个属性,而且这个属性又有setter和getter方法呢?这时候我们就需要用到runtime了,我们利用runtime给该对象的属性关联一个值,在.m文件中实现以下代码即可:
ps:对于想亲自验证结果的小猿,可以使用以下方法验证:
//使用前记得#import <objc/runtime.h>
//返回方法列表
class_copyMethodList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)
//返回属性列表
class_copyPropertyList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)
//返回成员变量列表
class_copyIvarList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)