1.在用户点击屏幕上的icon时,iOS系统用户体验层进程SpringBoad调用fork创建进程(复制进程),并执行execl函数将新的可执行代码载入内存,执行loadMachine去加载主Mach-o,进行__TEXT,__DATA的映射,加载UUID,创建主线程,代码签名验证,加载动态链器。
2.动态连接器加载完成后,动态链接器先加载主程序,再加载所依赖的动态库,这个加载的过程。
3.主程序进行初始化时,是递归进行的,依赖关系呈现的是一个类似树的有向图。递归过程是树的深度遍历。在向下递归时,遇到image没有依赖了时,也就是叶子节点,树形结构的最左边的叶子节点就是libsystem,会通执行_dyld_objc_notify_register里注册的load_image方法,进而进行category的加载,+load的方法的执行,然后初始化C&C++的静态化变量,然后调用 constructor 函数。而不是像市面是上的千篇一律的+load方法执行后,在初始化C&C++静态变量,然后调用constructor函数。一定要注意是递归。递归到最上层了,就是主程序了,也就是主程序的+load方法,在初始化C&C++静态变量,然后调用constructor函数。