本文主要是介绍类的load方法和initialize方法对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. load方法在main()之前被调用,而initialize方法在main()之后调用
load方法实际是在load_images过程中被调用的。load_images会将当前应用依赖的所有镜像(动态库)加载到内存,在在加载中首先是对镜像进行扫描,将所有包含 load 方法的类加入列表 loadable_classes ,然后从这个列表中逐一调用其所包含的 load 方法。
+[XXClass load] //对应类的load方法
call_class_loads() //找到loadable_class的load方法并调用
call_load_methods() //扫描镜像中的load方法,生成loadable_class列表
load_images() //加载镜像(动态库)
dyld::notifySingle(dyld_image_states, ImageLoader const*)
_dyld_start
initialize方法则是在第一次向类发送消息时被调用。
2. category中的load方法不会覆盖类原本的load方法,两者都会被调用;而category中若有initialize方法,会覆盖类原来的initialize方法,即只有category中的initialize方法被调用。
load方法和initialize方法的这种差异, 决定了如果我们要对类的方法进行swizzle操作,比较靠谱的方式是将swizzle相关代码写在load方法中,确保相关逻辑一定会执行。
3. 如果多个category中都实现了load方法, 则其调用顺序与其编译顺序有关;若多个category中都实现了initialize方法,则最终只有编译顺序最后的initialize方法会被调用。
4. load方法是用户代码能够最早被访问到的方法,并且类只有有load方法,就一定会在应用程序main方法调前被调用;initialize则采用的则是类似懒加载的方式, 某个类只要未被访问到,就不会被调用。
这篇关于类的load方法和initialize方法对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!