东丽网站建设,在线代理访问网站的网址,杭州ui设计公司,酒泉手机网站建设iOS应用冷启动时#xff0c;在 UIApplicationMain(argc, argv, nil, appDelegateClassName)方法执行前#xff0c;主要经历以下阶段#xff1a; 1. 执行exec#xff08;#xff09;启动应用程序进程 2. 加载可执行文件#xff0c;即将应用程序的Mach-O文件加载到内存… iOS应用冷启动时在 UIApplicationMain(argc, argv, nil, appDelegateClassName)方法执行前主要经历以下阶段 1. 执行exec启动应用程序进程 2. 加载可执行文件即将应用程序的Mach-O文件加载到内存 3. 加载Dyld加载应用程序依赖的动态库 4. Dyld加载其他动态库分析动态库的依赖并递归加载其他动态库 5. Rebase根据动态库加载的随机地址符号偏移为镜像中的符号生成真实的指针地址 6. Bind查询符号表确定镜像中依赖的外部符号的内存地址 7. Objc 即注册OC类、协议 以及将category中的方法添加到方法列表 8.Initalizers执行OC类的load方法以及执行C类的构造方法C初始化全局、静态对象。 由此可知 在应用程序启动时 1. 动态库加载越多启动越慢。 2. ObjC类方法越多启动越慢。 3. ObjC的load方法越多启动越慢。 4. C的constructor函数越多启动越慢。 5. C静态对象越多启动越慢。 优化策略 1. 减少动态库数量 2. 删除无用的类或类中无用的方法合并category避免静态全局变量大量使用 3. 尽量不重写类的load方法以便尽可能使符号采用懒加载 4. 避免在load方法中执行耗时操作或者使用异步或多线程 5. 减少使用xib进行页面布局减少布局转换耗时 6. 通过二进制重排减少内存页加载 method-swizzling改在initialize方法中虽然可以提升部分性能但应十分谨慎。因为一旦category中实现了initialize方法当前类的initialize会被覆盖即可能不会执行进而可以导致意料之外的严重问题