iOS的APP的启动原理和布局(业务拆分和C弱化降低耦合)
APP的启动原理
- 我们知道程序的入口是
mian
函数
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([CCAppDelegate class]));
}
}
从上面的函数中我们可以看出有4个参数,我们主要来说说第三个和第四个参数
第三个参数:设置应用程序对象名称UIApplication或者它的子类,如果nil,测默认是UIApplication对象
第四个参数:应用程序的代理名称,这个地方可以更改自己定义的代理方法,要遵循 UIApplicationDelegate协议,实现协议方法
从上面的方法中 我们可以看到,我更改了其代理的名称CCAppDelegate
- 启动原理
1.执行mian行数(程序的入口函数)
2.执行UIApplicationMain函数,创建UIApplication对象,设置UIApplication的代理
3.设置主运行循环(死循环),接受事件
4.加载info.plist文件,如果plist指定main(NSMainNibFile)或者xib文件,就去加载这个文件
5.程序启动完毕,通知代理(AppDelegate),应用程序启动完毕
AppDelegate的业务拆分
- 如果
AppDelegate
需要执行或者配置文件很多的话,不方便我们管理和查找 - 比如:启动广告页,激光推送,即时通讯类的配置,分享等,这时我们需要给
AppDelegate
扩展出分类,方便我们管理
APP启动时间优化
APP启动事件可以分为2个T1 + T2
-
T1
是指在执行main函数
之前,主要是+(void)load;
方法,这个方法是:文件加载内存的时候就被调用
从上面的图中我们可以看到,会加载main
上面的的文件,及会执行里面的load
,所以要尽量避免使用这个方法,如果必要可以用+(void)initialize
代替
-
T2
是指程序启动的时间优化,如果AppDelegate
的配置文件过多,可以先让主线程
加载主要的配置方法,其他的放到子线程
中去-
T2
中还包含pch
预编译文件加大时长,其实这个在Xcode
的时候,苹果是不建议使用的,静态ku,第三方的编译文件等
-