1. + (void)load方法
runtime会在加载类、分类时调用load方法(程序一启动main函数之前),且只调用一次.
调用原理
调用load方法的时候并不走obj_msgSend流程,而是将load方法的内存地址赋值给一个名叫load_method的指针,通过地址直接调用load方法.
调用顺序
1.先调用类的load方法
按照编译顺序调用(先编译先调用)
调用子类load方法之前会先调用父类load方法
2.再调用分类的load方法
按照编译顺序调用(先编译先调用)
2.+ (void)initialize方法
initialize方法会在类第一次收到消息的时候调用.
调用原理
通过obj_msgSend调用,所以分类的initialize会覆盖原类的initialize.
调用顺序
先调用父类的initialize,再调用子类的initialize;
注意:
1.如果子类没有实现initialize,调用子类的initialize时候会调用父类的initialize,所以父类的initialize方法可能会多次调用;
2.如果调用子类的initialize方法的时候,父类的initialize没有初始化过(即没有调用过父类的initialize),则会先调用父类的initialize,然后再调用子类的initialize;
3.分类的initialize会覆盖原类的initialize.