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

原创 2017年02月20日 09:40:20

对于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_

版权声明:本文为博主原创文章,允许转载,注明出处,回复告诉博主一声即可。

OC中类的load和initialize方法

看到寒哥教你学iOS - 经验漫谈中有使用load方法来加载第三方类库的情况。在《Effective Objective-C 2.0》中有一节也是讲load与initialize方法的。发现自己并没有...
  • u014084081
  • u014084081
  • 2015年09月07日 17:00
  • 1596

Objective-C Runtime 解析(二)——NSObject的load与initialize方法

NSObject类作为Objective-C中绝大多数类的父类,向其子类提供了基本的Runtime接口与Objective-C Class的一些方法默认实现。在NSObject中有两个类方法,load...
  • u013378438
  • u013378438
  • 2016年08月10日 21:19
  • 2199

load方法和initialize方法的理解

load 和 initialize 两个方法算是两个特殊的类方法了,今天偶然从草稿箱中看到还有本篇未完成的博文,如果说当初了解它们是为了应付面试,那么工作之后,了解它们就变成了“必修课”,相比于网上某...
  • RunIntoLove
  • RunIntoLove
  • 2016年09月02日 10:12
  • 888

OC- +load方法 和 +initialize方法

1、+load 方法+load 方法是当类或分类被添加到 Objective-C runtime 时被调用的,实现这个方法可以让我们在类加载的时候执行一些类相关的行为。子类的 +load 方法会在它的...
  • ShengQiangLiu
  • ShengQiangLiu
  • 2016年03月12日 16:40
  • 980

OC中类的load和initialize方法

看到寒哥教你学iOS - 经验漫谈中有使用load方法来加载第三方类库的情况。在《Effective Objective-C 2.0》中有一节也是讲load与initialize方法的。发现自己并没有...
  • u014084081
  • u014084081
  • 2015年09月07日 17:00
  • 1596

细说OC中的load和initialize方法

http://ios.jobbole.com/84088/ OC中有两个特殊的类方法,分别是load和initialize。本文总结一下这两个方法的区别于联系、使用场景和注意事项。Demo可以在...
  • jeffasd
  • jeffasd
  • 2016年04月07日 14:18
  • 155

load方法和initialize方法

load方法:程序一启动加载类时,就会自动调用load方法 initialize方法:只有在第一次使用该类的时候调用initialize方法,未使用,则不加载 这两个方法都属于类方法,都是在NSO...
  • raoshihong
  • raoshihong
  • 2015年05月24日 21:22
  • 255

[iOS]细说OC中的load和initialize方法

之前在替换数组内部方法的时候: [iOS]防止数组越界及添加空值的crash的扩展,使用到了load方法,今天看到了一个详细的介绍的文章,就转载而来以供学习!! OC中有两个特殊的类方法,分别是lo...
  • lqq200912408
  • lqq200912408
  • 2016年03月02日 13:52
  • 684

load方法和initialize方法的理解

load 和 initialize 两个方法算是两个特殊的类方法了,今天偶然从草稿箱中看到还有本篇未完成的博文,如果说当初了解它们是为了应付面试,那么工作之后,了解它们就变成了“必修课”,相比于网上某...
  • RunIntoLove
  • RunIntoLove
  • 2016年09月02日 10:12
  • 888

iOS类重要的两个方法 load 和 initialize

load: 当类被引用进程序的时候会执行这个函数。 在一个程序开始运行之前(在main函数开始执行之前),在库开始被程序加载,load函数就会开始被执行。 我们开发的程序都可以认为是一个库,但是...
  • hncsy403
  • hncsy403
  • 2016年12月20日 20:31
  • 561
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC中load方法和initialize方法的异同
举报原因:
原因补充:

(最多只允许输入30个字)