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

举报
Serendipity·y 发表于 2022/02/17 00:23:16 2022/02/17
【摘要】 一、前言 Objective-C 作为一门面向对象语言,有类和对象的概念。编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用。在应用程序运行起来的时候,类的信息会有加载和初始化过程。...

一、前言

  • 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 方法的调用顺序是不确定的。

文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Forever_wj/article/details/119996074

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。