objc runtime之属性扩展(objc_getAssociatedObject,objc_setAssociatedObject,objc_removeAssociatedObjects)

    category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 法;associative,可以通过它来扩展属性;在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用 它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及 objc_setAssociatedObject,我们来看下这两个方法:

1.创建关联:参数设置(源对象,关键字,关联的对象和一个关联策略)

2.获取关联对象:参数设置(源对象,关键字)

另外,还有一个方法:可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。

 

注:断开关联可使用objc_setAssociatedObject(源对象,关键字,关联的对象和一个关联策略) ,关联对象传入nil即可;

  关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。

     关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用预先定义好的常量来表示的。

posted @ 2015-03-16 15:32  巴格  阅读(546)  评论(0编辑  收藏  举报