1:分类的方法都会通过运行时合并到类对象中(+方法一样合并到元类对象)
2:分类在编译的时候变成了_category_t的结构体,存储着类名,类对象,实例方法列表,类方法列表,协议列表,属性列表。
3:分类合并注意点:最后面参与编译的方法优先放在前面,若分类和类都有相同的方法,分类优先。
4:OC 的 extenstion 是在编译的时候就将属性信息,成员信息等合并到类对象中。
5:load方法在 runtime加载类或者分类的时候调用,只调用一次
6:先调用类的load方法,load按编译顺序调用,若有父类,先调用父类的 load,之后再调用分类的load方法,按编译顺序调用。
7:load直接通过函数地址进行调用,而其他方法通过 objc_msgSend 进行调用
8: initialize在类第一次接收消息的时查找方法的过程中调用,在调用子类的initialize之前会先调用父类的initialize,这一点和 load一样
9:分类实现了initialize就覆盖主类的initialize
10:在分类里写属性,只会生成 getter 和 setter 的方法声明,不会生成成员变量
11:关联对象原理:disguised_ptr_t是传进来的实例对象或类对象进行 DESGUISE位运算得到的,AssociationsMap内的 key就是传进来的key
12:设置关联对象为 nil,可以移除关联对象