initialize和load方法的使用和比较

来源:互联网 发布:淘宝视觉营销全攻略 编辑:程序博客网 时间:2024/06/04 00:04

在oc中,绝大多数类都继承于NSObject根类,在该类中有两个方法被用来执行初始化操作,即NSObject类的load方法和initialize方法。

1.load方法
原型如下:

+(vid)load

当应用程序启动的时候,就会掉用各个类的该方法。而且当类(class)和分类(category)中都定义了load方法时,先调用类的再调用分类的。执行子类的load方法前,会先执行所有super类的load方法,而如果在类的load方法中还依赖了其他的程序库或者其他类,那程序库及其相关类的load方法都会被调用。
而因为load方法的调用时机时程序刚启动的时候,谁也不能保证在load方法中使用的其它类就已经被加载好了,也许其使用的另一个类需要进行一些特定的操作才能正常使用,这时候程序就会出现问题。
除此之外,load方法还有一个比较不一样的地方,就是load方法并不尊从继承规则。如果某个类没有实现load方法,那么不管其各级父类是否实现了该方法,系统都不会调用。
load方法会阻塞程序直到完成所有类的load方法调用,程序加载时间就会被延长影响用户体验,所以一般只应该用来调适程序,比如在分类中实现load方法来判断分类是否被正确加载,其它情况应该尽量避免。

2.initialize
方法原型:

+(vid)initialize;

initialize不同于load方法的是,initialize方法使用的是懒加载方法,即使用到该类的时候才会进行调用,也就是说如果程序中并没有使用到某个类那这个类的initialize方法永远不会被调用。initialize方法遵循系统的继承规则,当子类没有覆写该方法时,系统会自动调用父类的。在该方法中其实也应该尽量简化代码,避免在类中调用其它方法或者使用其它类,原因同load方法类似,可能会引入“依赖环”。
initialize方法尽量用来初始化该类的内部变量,比如设置初始化全局变量。

0 0
原创粉丝点击