对于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方法被执行。

转载于:https://juejin.im/post/5a7026376fb9a01c9c1f5041

iOS load方法和initialize方法的异同相关推荐

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

    + (void)load; 当类对象被引入项目时, runtime 会向每一个类对象发送 load 消息 load 方法会在每一个类甚至分类被引入时仅调用一次,调用的顺序:父类优先于子类, 子类优先于 ...

  2. Loader的load方法和loadBytes方法LoaderContext参数

    (1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...

  3. Java中sleep()方法和wait()方法的异同点

    前言 前几篇文章讲过wait()系列方法后,我们来对比看看它和sleep()方法有什么异同点.如果不了解wait()方法也没关系,文章中我会附上涉及到的文章.我们先从sleep()方法讲起,彻底搞清楚 ...

  4. IOS开发基础Object-C( 04)—构造方法和description方法

    在上一篇博客中,我们简单介绍了一下点语法和self,相信大家对点语法以及self有了一点的了解,点语法的本质就是调用get方法和set方法.那么今天我们再来介绍一下构造方法和description. ...

  5. iOS-class方法和objc_getClass方法

    根据上一篇博客iOS-class.object_getClass.objc_getClass.objc_getMetaClass区别的研究发现,发现主要还是class方法和objc_getClass方 ...

  6. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  7. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法

    概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...

  8. JS服务器端开发基础篇(Array.slice方法和splice方法)

    Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正.  一.slice ...

  9. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

最新文章

  1. 点云数据向图像数据转换(附源码)
  2. R语言与数据分析(1) 数据分析流程、数据挖掘、数据可视化
  3. HDU 2149 Public Sale (博弈)
  4. 基于jsp的教师科研工作量_基于jsp+mysql的JSP教师科研信息管理系统
  5. 快速求幂(Quick Exponentiation)
  6. MVC数据的注册及验证简单总结
  7. js原生事件委托的实现
  8. linux中变量的使用
  9. C#:将图片文件上传到数据库两种方法。
  10. Html学习手册(W3CSchool.chm)
  11. JAVA栅栏密码解密程序
  12. HTML 多选框
  13. 微信车主服务代扣的坑
  14. python入门书籍推荐,看这篇文章就够,请!
  15. 计算机组成原理云南大学,云南大学信息学院计算机方向
  16. 用PGP实现加密和解密全过程
  17. VS中使用Qt方法详解
  18. Qt给字体设置下划线
  19. 【STM32】两轮自平衡小车学习笔记1
  20. 为什么INT_MIN不是直接写成-2147483648

热门文章

  1. Python自动化运维之5、内置函数
  2. DNS and BIND
  3. winForm调用HTTP短信接口
  4. [Contest20180415]看无可看
  5. createjs开发h5游戏: 指尖大冒险
  6. Android获取和判断当前手机状态和信息
  7. 【原】移动端界面的适配
  8. Windows上python开发--2安装django框架
  9. 1-2 Zabbix web界面支持中文
  10. 如何低价坐飞机头等舱