initialize和load方法的使用和比较

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值