+(void)load; +(void)initialize;有什么用处?

总得来说:

1.+load方法是在main函数之前调用的;

2.遵从先父类后子类,先本类后列类别的顺序调用;

3.类,父类与分类之间的调用是互不影响的.子类中不需要调用super方法,也不会调用父类的+load方法实现;

4.无论该类是否接收消息,都会调用+load方法;

 

总得来说:

1.+initialize方法是在main函数之后调用的;

2.+initialize方法遵从懒加载方式,只有在类或它的子类收到第一条消息之前被调用的;

3.子类中不需要调用super方法,会自动调用父类的方法实现;

4.+initialize只调用一次,init可多次调用.

 

+ load与+ initialize的异同

 

load方法常用来method swizzle,initialize常常用于初始化全局变量和静态变量.

 

load方法:父类>子类>分类

注意:当存在继承关系的两个文件时,不管父类文件是否排在子类或其他文件的前面,都是优先调用父类的,然后调用子类的。

例如:compile sources中的文件顺序如下:SubB、SubA、A、B,load的调用顺序是:B、SubB、A、SubA。

分析:SubB是排在compile sources中的第一个,所以应当第一个被调用,但是SubB继承自B,所以按照优先调用父类的原则,B先被调用,然后是SubB,A、SubA。

 

转自:https://blog.csdn.net/qq_31810357/article/details/70622276

 

posted @ 2017-09-24 21:49  黄增松  阅读(511)  评论(0编辑  收藏  举报