1、调用方式

1.1、load是根据函数地址直接调用(编译时调用)。
1.2、initialize是通过objc_msgSend调用(其类或者其子类的第一个方法被执行前调用)。
**共同点:**方法只会被调用一次。

2、调用时机(什么时候会调用)

2.1、load是runtime加载类、分类的时候调用(只会调用一次)。
2.2、initialize是类第一次接收到消息的时候调用,每一个类只会initialize一次(父类的initialize方法可能会被调用多次)。

3. 调用顺序

3.1、load

3.1.1、先调用类的load(先编译的类先调用)
3.1.2、调用子类的load之前,先调用父类的load
3.1.3、再调用分类的load(先编译的分类先调用)

3.2、Initialize

3.2.1、先初始化父类。
3.2.2、再初始化子类(可能最终调用的是父类的Initialize的方法(原因:如果子类没有实现Initialize方法时,会通过superclass调用父类的Initialize的方法)))。
3.2.3、如果在分类中也实现了Initialize方法,则会先调用父类的中的方法,再调用分类中的方法,不会调用本类中的方法,(原因:在运行时(runtime)系统会把分类中的方法插入到原有类的方法数组之前(系统会先创建一个数组将原有类中的方法加入到数组中,在运行时,系统会把分类中的方法插入到数组中(是插入不是添加哦!)))。

总结:

+(void)load +(void)initialize
执行时机 在程序运行后立即执行 在类的方法第一次被调时执行
若自身未定义,是否沿用父类的方法?
类别中的定义 全都执行,但后于类中的方法 覆盖类中的方法,只执行一个

参考:
1、Load方法和Initialize的区别和使用

Load和Initialize的区别和使用相关推荐

  1. oc---类方法load和initialize的区别

    在iOS开发中,就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理.而这正是本篇文章所要介绍的lo ...

  2. 你需要了解的load和initialize

    NSObject类有两种初始化方式load和initialize load + (void)load; 复制代码 对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次. iOS会在应用程序启动 ...

  3. iOS---Objective-C: +load vs +initialize

    在 NSObject 类中有两个非常特殊的类方法 +load 和 +initialize ,用于类的初始化.这两个看似非常简单的类方法在许多方面会让人感到困惑,比如: 子类.父类.分类中的相应方法什么 ...

  4. 解读OC中的load和initialize

    在 Objective-C 中,NSObject 是绝大多数类的基类.而在 NSObject 中有两个类方法 load 和 initialize,那这两个方法是在什么时机被调用呢?父类.Categor ...

  5. Hibernate Session get()vs load()的区别

    Hibernate Session get()vs load()的区别 Hibernate Session提供了从数据库中获取数据的不同方法.其中两个是 - get()和load().我们还可以在不同 ...

  6. iOS—分类、load 、initialize

    文章目录 分类 分类的结构 load方法的调用顺序 initialize load和initialize区别 分类在运行期做了什么 为什么category不能添加成员变量 分类能否添加属性 使用关联对 ...

  7. Load和Initialize往死了问是一种怎样的体验?

    2017.08.08 这个问题有点炒冷饭了,写了 demo 才更深入的了解这个问题,就当做个简单的笔记吧 一. Load和Initialize的往死了问是一种怎样的体验? Load 和 Initial ...

  8. Load和Initialize的往死了问是一种怎样的体验

    Load 和 Initialize 先加载哪个? 父类和子类以及 Category 的关系? 如果是多个 Category 呢? Load 开发文档的直接解读 加载顺序总结 所有类和分类的 +load ...

  9. 在c语言中load,一道题理清Objective-C中的load和initialize

    Objective-C中有两个方法比较特殊,他们会在Runtime时根据情况自动调用,下面我们简单分析一下调用时机以及使用场景~ 一般在iOS初中级面试时偶尔会被问到load和initialize方法 ...

  10. hibernate中get方法和load方法的根本区别

    hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...

最新文章

  1. 【原创】Cookie应用(二)
  2. 揭秘微软全球最大数据中心
  3. 广州网络推广是如何利用自媒体平台做好网络营销推广的?
  4. php获取微信收款记录,微信公众号开发之微信支付代码记录的实现
  5. linuxliveu盘怎么用_U盘数据如何恢复?U盘打不开怎么办?
  6. 百度社会化分享组件使用问题
  7. 爬虫-14-利用代理爬取数据
  8. 14亿条记录,12c 做不到2小时内变更表结构字段类型?
  9. latex中正文前出现一页空白页,且占正文页数
  10. 第二:Postman做各种类型的http接口测试
  11. illegal utf8 encoding at (190)
  12. 设计模式笔记之六:生产消费者模式
  13. 有没有办法为Node.js项目自动构建package.json文件
  14. mysql 函数操作_mysql 数学操作函数
  15. 新中大银色快车服务器重装,新中大简约型ERP软件银色快车SEV9.0版安装说明.doc...
  16. 卓有成效的管理者——彼得·德鲁克
  17. RGB转NV21格式
  18. C语言的自动关机程序和一个用来整人的小程序
  19. 使用xpath解析爬取链家
  20. 在家谱中查找关系远近

热门文章

  1. LearnOpenCV学习——平均脸
  2. DHCP协议以及其配置
  3. quickchm乱码问题
  4. 全国气象预报业务产品grib2数据格式解析
  5. 计算机运行慢提速小技巧,教你为Win7系统加速的五个技巧
  6. 关于IE6无法升级为IE7或者IE8的问题
  7. pom 备注_POM 500P物性表
  8. 特征选择与特征权重计算的区别
  9. Java获取电脑外网ip地址方法
  10. id 查找apple,怎么查找我的apple id?