iOS 程序内容加载顺序

从方法调用栈中,找到了系统在执行 load 前调用的方法:

1.启动 dyld,将二进制文件初始化

2.ImageLoader 把二进制文件加载进内存

3.runtime 执行 load_images ,执行所有的 load 方法

使用一个全局数组从含有 load 方法的根父类到自身,依次添加
使用另一个全局数组添加含有 load 方法的所有分类
依次执行存储的 load 方法,父类 -> 自身 -> 分类

4.执行自定义的 load 方法

+ (void)load;

对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次。

iOS会在应用程序启动的时候调用load方法,在main函数之前调用

执行子类的load方法前,会先执行所有超类的load方法,顺序为父类->子类->分类

在load方法中使用其他类是不安全的,因为会调用其他类的load方法,而如果关系复杂的话,就无法判断出各个类的载入顺序,类只有初始化完成后,类实例才能进行正常使用

load 方法不遵从继承规则,如果类本身没有实现load方法,那么系统就不会调用,不管父类有没有实现(跟下文的initialize有明显区别)

尽可能的精简load方法,因为整个应用程序在执行load方法时会阻塞,即,程序会阻塞直到所有类的load方法执行完毕,才会继续

load 方法中最常用的就是方法交换method swizzling

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,446评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,350评论 30 472
  • 不知從何時開始有種不安的感覺 不知所措的張望未來 我一直在等待 等待著候鳥歸來 帶著你凱旋的消息 可是。。。 一次...
    洛洛物语阅读 952评论 0 1
  • 《它只是长得高》 珠穆朗玛峰什么都没有做, 它只是长得高。 于是,很多人想去瞻仰它, 很多人想去攀登它。 可是,它...
    从容如羊阅读 754评论 0 0