1、+ initialize方法会在类第一次接受到消息时调用
2、+initialize方法是通过objc_msgSend函数(消息发送机制)调用
2.1、如果子类没有实现+initialize,会调用父类的+initialize(所以父类的+initialize可能会被调用多次)
2.2、如果分类实现了+initialize,会覆盖类本身的+initialize的调用
调用顺序
1、先调用父类的+initialize方法,再调用子类的+initialize方法(如果有实现+initialize时) — 先初始化父类,再初始化子类,每个类只会初始化一次
2、遵循消息发送机制的方法查找顺序
============================== 源码解读顺序 ==============================
============================== 核心代码查看 ==============================
Method class_getClassMethod(Class cls, SEL sel)
{
if (!cls || !sel) return nil;
return class_getInstanceMethod(cls->getMeta(), sel);
}
Method class_getInstanceMethod(Class cls, SEL sel)
{
if (!cls || !sel) return nil;
#warning fixme build and search caches
lookUpImpOrForward(nil, sel, cls, LOOKUP_RESOLVER);
#warning fixme build and search caches
return