dyld 庫(kù)加載
_objc_init 加斷點(diǎn) -> lldb bt
dyld 加載
在load 中加斷點(diǎn)
+ (void)load{
? ? NSLog(@"%s",__func__);
}
lldb bt
具體調(diào)用是從_dyld_start 開(kāi)始的
_dyld_start ->?dyldbootstrap::start ->?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, ...) -> 調(diào)用sNotifyObjCInit方法