Load和Initialize的区别和使用
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的区别和使用相关推荐
- oc---类方法load和initialize的区别
在iOS开发中,就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理.而这正是本篇文章所要介绍的lo ...
- 你需要了解的load和initialize
NSObject类有两种初始化方式load和initialize load + (void)load; 复制代码 对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次. iOS会在应用程序启动 ...
- iOS---Objective-C: +load vs +initialize
在 NSObject 类中有两个非常特殊的类方法 +load 和 +initialize ,用于类的初始化.这两个看似非常简单的类方法在许多方面会让人感到困惑,比如: 子类.父类.分类中的相应方法什么 ...
- 解读OC中的load和initialize
在 Objective-C 中,NSObject 是绝大多数类的基类.而在 NSObject 中有两个类方法 load 和 initialize,那这两个方法是在什么时机被调用呢?父类.Categor ...
- Hibernate Session get()vs load()的区别
Hibernate Session get()vs load()的区别 Hibernate Session提供了从数据库中获取数据的不同方法.其中两个是 - get()和load().我们还可以在不同 ...
- iOS—分类、load 、initialize
文章目录 分类 分类的结构 load方法的调用顺序 initialize load和initialize区别 分类在运行期做了什么 为什么category不能添加成员变量 分类能否添加属性 使用关联对 ...
- Load和Initialize往死了问是一种怎样的体验?
2017.08.08 这个问题有点炒冷饭了,写了 demo 才更深入的了解这个问题,就当做个简单的笔记吧 一. Load和Initialize的往死了问是一种怎样的体验? Load 和 Initial ...
- Load和Initialize的往死了问是一种怎样的体验
Load 和 Initialize 先加载哪个? 父类和子类以及 Category 的关系? 如果是多个 Category 呢? Load 开发文档的直接解读 加载顺序总结 所有类和分类的 +load ...
- 在c语言中load,一道题理清Objective-C中的load和initialize
Objective-C中有两个方法比较特殊,他们会在Runtime时根据情况自动调用,下面我们简单分析一下调用时机以及使用场景~ 一般在iOS初中级面试时偶尔会被问到load和initialize方法 ...
- hibernate中get方法和load方法的根本区别
hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...
最新文章
- 【原创】Cookie应用(二)
- 揭秘微软全球最大数据中心
- 广州网络推广是如何利用自媒体平台做好网络营销推广的?
- php获取微信收款记录,微信公众号开发之微信支付代码记录的实现
- linuxliveu盘怎么用_U盘数据如何恢复?U盘打不开怎么办?
- 百度社会化分享组件使用问题
- 爬虫-14-利用代理爬取数据
- 14亿条记录,12c 做不到2小时内变更表结构字段类型?
- latex中正文前出现一页空白页,且占正文页数
- 第二:Postman做各种类型的http接口测试
- illegal utf8 encoding at (190)
- 设计模式笔记之六:生产消费者模式
- 有没有办法为Node.js项目自动构建package.json文件
- mysql 函数操作_mysql 数学操作函数
- 新中大银色快车服务器重装,新中大简约型ERP软件银色快车SEV9.0版安装说明.doc...
- 卓有成效的管理者——彼得·德鲁克
- RGB转NV21格式
- C语言的自动关机程序和一个用来整人的小程序
- 使用xpath解析爬取链家
- 在家谱中查找关系远近