冷启动:从0开始启动App
1、App启动时,dyld会将可执行文件加载到内存中,同时加载依赖的动态库,都加载完毕后,会通知runtime进行下一步操作。
2、runtime调用map_images解析和处理可执行文件。
在load_images中,会调用call_load_methods,调用所有的class和category中的+load方法。
进行各种OC结构体的初始化(注册OC类、初始话类对象等)。
调用c++静态初始化器和_ attribute _((constructor))修饰的函数。
3、main函数调用,接下来就是AppDelegate的application:didFinishLaunchingWithOptions:方法的调用。
针对上述流程进行优化:
1、减少动态库的依赖
2、减少OC类目和category,定期清除不使用的OC类
3、用dispathch_once()替代所有的c++静态对象初始话、_attribute _((constructor))修饰的函数、+load()方法
4、将不必要的耗时操作往后执行,不要全部都放在didFinishLaunchingWithOptions中执行。
网友评论