iOS dyld加载

dyld 库加载

dyld

_objc_init 加断点 -> lldb bt

调用栈

dyld 加载

在load 中加断点

+ (void)load{

    NSLog(@"%s",__func__);

}

lldb bt

lldb调用栈

具体调用是从_dyld_start 开始的

_dyld_start -> dyldbootstrap::start -> dyld::_main

dyld::_main流程

_mian 往下走

接下来流程

dyld加载 ->ImageLoader::recursiveInitialization -> this->doInitialization -> libobjc源码中 _objc_init -> _dyld_objc_notify_register (dyld 源码) -> registerObjCNotifiers ->  初始化 sNotifyObjCMapped ,sNotifyObjCInit,sNotifyObjCUnmapped

void registerObjCNotifiers(_dyld_objc_notify_mapped mapped, _dyld_objc_notify_init init, _dyld_objc_notify_unmapped unmapped)

{

// record functions to call

sNotifyObjCMapped = mapped;

sNotifyObjCInit = init;

sNotifyObjCUnmapped = unmapped;

}

dyld加载 ->ImageLoader::recursiveInitialization -> context.notifySingle(dyld_image_state_dependents_initialized, ...) -> 调用sNotifyObjCInit方法

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

推荐阅读更多精彩内容