由Runtime的SwizzleMethods想到的类方法load和initialize方法之间有何不同
+load方法
1.+load方法是在main函数之前调用的;
2.遵从先父类后子类,先本类后列类别的顺序调用;
3.类,父类与分类之间的调用是互不影响的.子类中不需要调用super方法,也不会调用父类的+load方法实现;
4.无论该类是否接收消息,都会调用+load方法;
5.+load只调用一次;
+initialize方法
1.+initialize方法是在main函数之后调用的;
2.+initialize方法遵从懒加载方式,只有在类或它的子类收到第一条消息之前被调用的;
3.子类中不需要调用super方法,会自动调用父类的方法实现;
4.+initialize至多只调用一次;
+load和+initialize对比图
110844-fc6301e3b08fa26d.png备注
当用swizzleMethod时,还有一种方法
就是c语言的 __attribute__((constructor)) void function()
此方法晚于+load,早于main
感谢骑神,让我又get到一个方法!!
网友评论