Minecraft

目前最有趣的等待,是未来

OC中load方法和initialize方法的异同

对于OC中的类来说,在runtime中会有两个方法被调用:

  • +load
  • +initialize

这两个方法看起来都是在类初始的时候调用的,但其实还是有一些异同,从而可以用来做一些行为。

+load

首先,load方法是一定会在runtime中被调用的,只要类被添加到runtime中了,就会调用load方法,所以我们可以自己实现laod方法来在这个时候执行一些行为。

而且有意思的一点是,load方法不会覆盖。也就是说,如果子类实现了load方法,那么会先调用父类的load方法,然后又去执行子类的load方法。同样的,如果分类实现了load方法,也会先执行主类的load方法,然后又会去执行分类的load方法。所以父类的load会执行很多次,这一点需要注意。而且执行顺序是 类 -> 子类 ->分类。而不同类之间的顺序不一定。

+initialize

与load不同的是,initialize方法不一定会执行。只有当一个类第一次被发送消息的时候会执行,注意是第一次。什么叫发送消息呢,就是执行类的一些方法的时候。也就是说这个方法是懒加载,没有用到这个类就不会调用,可以节省系统资源。

还有一点截然相反,却更符合我们预期的就是,initialize方法会覆盖。也就是说如果子类实现了initialize方法,就不会执行父类的了,直接执行子类本身的。如果分类实现了initialize方法,也不会再执行主类的。所以initialize方法的执行覆盖顺序是 分类 -> 子类 ->类。且只会有一个initialize方法被执行。


版权所有:http://blog.csdn.net/cloudox_

阅读更多
版权声明:本文为博主原创文章,允许转载,注明出处,回复告诉博主一声即可。 https://blog.csdn.net/Cloudox_/article/details/56005795
文章标签: iOS
个人分类: iOS
所属专栏: 拾遗iOS之海
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

OC中load方法和initialize方法的异同

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭