load vs initialize
+ (void)load
当类或分类被添加到 Objective-C runtime 时被调用+ (void)initialize
在类或它的子类收到第一条消息之前被调用
下面是自行尝试结果:
类关系图:
+ (void)load
调用顺序:父类 > 子类 > 分类+ (void)initialize
调用顺序:
- 若父类之前
initialize
已经被调用过,那么只根据msg_send 调用本类initialize
- 若父类之前
initialize
没有被调用过,那么继续看父类的父类,直到找到一个被掉过的类,然后依次从根据msg_send
父类调用到子类