使用runtime关联对象

一、添加属性

在使用类别时可以直接添加方法,不能直接添加属性,但是可以利用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这两个属性。

二、关联对象

关联block,为alertVIew添加block点击事件

显示alert时,把代理的点击事件绑定到关联的block上面,这样以block的形式处理点击事件。

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

推荐阅读更多精彩内容