/************************************************************************ _objc_init* Bootstrap initialization. Registers our image notifier with dyld.* Called by libSystem BEFORE library initialization time**********************************************************************/
➜ RyukieDevGitBook git:(master) ✗ export OBJC_HELP=1objc[57485]: Objective-C runtime debugging. Set variable=YES to enable.objc[57485]: OBJC_HELP: describe available environment variablesobjc[57485]: OBJC_PRINT_OPTIONS: list which options are setobjc[57485]: OBJC_PRINT_IMAGES: log image and library names as they are loadedobjc[57485]: OBJC_PRINT_IMAGE_TIMES: measure duration of image loading stepsobjc[57485]: OBJC_PRINT_LOAD_METHODS: log calls to classandcategory+load methodsobjc[57485]: OBJC_PRINT_INITIALIZE_METHODS: log calls to class +initialize methods...
三、 static_init
调用全局静态C++构造函数
执行全局静态 C++构造函数
libc在 dyld 调用构造函数之前 调用_objc_init()
所以我们要自己处理
/************************************************************************ static_init* Run C++ static constructor functions.* libc calls _objc_init() before dyld would call our static constructors, * so we have to do it ourselves.**********************************************************************/staticvoidstatic_init(){size_t count;auto inits =getLibobjcInitializers(&_mh_dylib_header,&count);for (size_t i =0; i < count; i++) {inits[i](); }auto offsets =getLibobjcInitializerOffsets(&_mh_dylib_header,&count);for (size_t i =0; i < count; i++) { UnsignedInitializer init(offsets[i]);init(); }}
/************************************************************************ allocatedClasses* A table of all classes (and metaclasses) which have been allocated* with objc_allocateClassPair.**********************************************************************/namespace objc {static ExplicitInitDenseSet<Class> allocatedClasses;}
五、 exception_init
初始化 libobjc 的异常处理系统
/************************************************************************ exception_init* Initialize libobjc's exception handling system.* Called by map_images().**********************************************************************/voidexception_init(void){ old_terminate = std::set_terminate(&_objc_terminate);}