runtime 为系统类新增property
动态为系统类新增属性,以普通属性的方式进行访问。
事例如下,为UIView新增viewHegiht的方法。
1. 新增一个Category,文件名为UIView+Frame.h,UIView+Frame.m.
2. 在.h文件添加属性
1 | @property (nonatomic) CGFloat viewHeight; |
3. 在.m文件添加get,set方法以及实现
导入库:
1 | #import <objc/runtime.h> |
声明静态常量:
1 | static NSString const *playloadObject = @"playloadObject"; |
添加IMP:
1 | - (CGFloat)viewHeight{ |
set方法内调用runtime的方法objc_setAssociatedObject实现值与地址的绑定,注意四个参数,第一个为obj对象,第二个为参数的关联地址,第三个是id类型的对象,最后一个为objc_AssociationPolicy 。
get方法内调用runtime的方法objc_getAssociatedObject获取数值,注意返回值的内容是id类型,可自行转化为自己想要的类型。
4. 结束
以上过程完成了对UIView 的扩展,实现返回view的高度。可参照实现方法实现对类的属性的封装。