Load和Initialize的区别和使用

简介: 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的区别和使用


相关文章
|
3月前
|
Java 数据库连接 API
加载模型出现-RuntimeError: Error(s) in loading state_dict for Net:unexpected key(s) in state_dict: XXX
加载模型出现-RuntimeError: Error(s) in loading state_dict for Net:unexpected key(s) in state_dict: XXX
528 0
|
安全 Python
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
122 1
|
6月前
Cannot load keys from store: class path resource
Cannot load keys from store: class path resource
365 0
|
6月前
|
TensorFlow 算法框架/工具 Python
完美解决丨RuntimeError: create_session() called before __init__().
完美解决丨RuntimeError: create_session() called before __init__().
报错AttributeError: Can‘t pickle local object ‘Worker.__init__.<locals>.<lambda>‘解决办法
报错AttributeError: Can‘t pickle local object ‘Worker.__init__.<locals>.<lambda>‘解决办法
449 0
Could not initialize English chunker/Could not load file from classpath: ‘/en-token.bin‘
Could not initialize English chunker/Could not load file from classpath: ‘/en-token.bin‘
101 0
|
机器人
GazeboRosControlPlugin::Load 函数详解
GazeboRosControlPlugin::Load 函数详解
GazeboRosControlPlugin::Load 函数详解
|
存储
OC:关于Category、load、initialize的那些事你还记得吗?
这篇文章主要分析Category的实现原理,load方法和initialize方法调用方式、调用时机、调用顺序、以及他们的区别,解释 Catgory 与 class Extension 有什么区别。
154 0
torch.distributed.init_process_group(‘gloo’, init_method=‘file://tmp/somefile’, rank=0, world_size=1
torch.distributed.init_process_group(‘gloo’, init_method=‘file://tmp/somefile’, rank=0, world_size=1
601 0
torch.distributed.init_process_group(‘gloo’, init_method=‘file://tmp/somefile’, rank=0, world_size=1