一、添加属性
在使用类别时可以直接添加方法,不能直接添加属性,但是可以利用runtime中关联对象的方法添加属性。主要的两个方法:
1、objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)此方法使用key做标识设置关联对象,参数解释如下:
id object关联对象;const void * key获取被关联者的索引key;
id value被关联者;
objc_AssociationPolicy policy关联时采用的协议,根据需求设置不同的协议,可以直接点进去查看,有retain,copy,assgin等类型。
2、objc_getAssociatedObject(id object, const void *key)此方法根据key获取关联对象
id object关联对象;const void * key获取被关联者的索引key;
方法介绍完,下面实例。如果创建了一个UIViewController的分类,想要在里面添加设置placeHolder占位图view,但是VC没有这个属性,我们就可以使用runtime通过关联对象的方式实现。
如图,第一和第二个方法通过ZYPlaceHolderView这个key关联添加的属性。第三和第四个方法通过对属性自动生成set和get方法而实现。
这样可以在VC内直接使用self.placeHolderView和self.index这两个属性。
二、关联对象
显示alert时,把代理的点击事件绑定到关联的block上面,这样以block的形式处理点击事件。