iOS之深入解析类方法+load与+initialize的底层原理

Posted Forever_wj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS之深入解析类方法+load与+initialize的底层原理相关的知识,希望对你有一定的参考价值。

一、前言

  • Objective-C 作为一门面向对象语言,有类和对象的概念。编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用。在应用程序运行起来的时候,类的信息会有加载和初始化过程。
  • App 启动到执行 main 函数之前,程序就执行了很多代码。执行顺序为:
    • 将程序依赖的动态链接库加载到内存;
    • 加载可执行文件中的所有符号,代码 runtime 解析被编译的符号代码;
    • 遍历所有的 class;
    • 按继承层级一次调用 Class 的 load 和 category 的 load 方法。
  • 就像 Application 有生命周期回调方法一样,在 Objective-C 的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理,而这正是 load 和 initialize 方法可以做到的。

二、+load

  • +load 方法是当类或分类被添加到 Objective-C runtime 时被调用的,实现这个方法可以让我们在类加载的时候执行一些类相关的行为。子类的 +load 方法会在它的所有父类的 +load 方法之后执行,而分类的 +load 方法会在它的主类的 +load 方法之后执行。但是不同的类之间的 +load 方法的调用顺序是不确定的。

以上是关于iOS之深入解析类方法+load与+initialize的底层原理的主要内容,如果未能解决你的问题,请参考以下文章

IOS杂笔- 7(类方法load与initialize的区别 浅析)

IOS杂笔- 7(类方法load与initialize的区别 浅析)

iOS +load方法与 +initialize 方法调用顺序

iOS +load方法与 +initialize 方法调用顺序

iOS中 性能优化之浅谈load与initialize

iOS之深入解析类加载的底层原理:类如何加载到内存中?