美文网首页
iOS 程序内容加载顺序

iOS 程序内容加载顺序

作者: XPorter | 来源:发表于2017-10-12 09:13 被阅读65次

    从方法调用栈中,找到了系统在执行 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

    相关文章

      网友评论

          本文标题:iOS 程序内容加载顺序

          本文链接:https://www.haomeiwen.com/subject/dxlnyxtx.html