1.objc_setAssociatedObject 关联对象,对实例对象扩展属性。
比如oc或java如果一个对象里有三个属性,当你实例化后觉得这个对象需要再加个状态属性,怎么办?java自带API是极其难做到的,需要通过第三方的CGLIB。
OC就是通过这个技术对已经实例化的对象添加属性,用法也不咋好,主要是语法看上去很繁琐。
这里要表扬下JS了,想实现动态添加属性非常方便。
2.Category
可以把类的实现放到几个不同的文件里,在不修改原类的基础上增加新方法,但这玩意只能加方法,不能增加成员变量,增加的方法如果和本类名字重名,就会覆盖掉。在运行的时候才会和本类主类合并。(mixpush就用到了AppDelegate+MiPush.h)
3.Extension
和Category相似,是后面出的一种OC语法,要强大些,原理有所不同, 可以增加方法和成员变量,原理是在编译的时候就会和主类本类合并。