一、iOS app 程序执行过程
1、执行main函数
2、在此方法中调用UIApplicationMain
2.1 创建UIApplication对象
2.2 创建UIApplication的delegate对象
2.3 开启消息循环
3、delegate对象开始监听系统事件
3.1 app启动完成后会调用delegate对象的程序加载完成的方法
3.2 如果app的plist设置了main storyboard 会创建UIWindow对象(如 果没有设置则不创建)
3.3 创建main storyboard中绑定的controller对象(stroyboard中箭 头指向的控制器)
3.4 设置给window对象的rootViewController
3.5 设置window对象可见
4、4大对象之间的关系 UIApplication (delegate)
AppDelegate<UIApplicationDelegate> (window)
UIWindow (rootViewController)
UIViewController (view 从加载xib或storyboard或代码创建) UIView
二、iOS app 程序执行过程
1. Not running:
应用还没有启动,或者应用正在运行但是途中被系统停止
2.Inactive:
当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。
3.Active:
当前应用正在前台运行,并且接收事件。这是应用正在前台运行时所处的正常状态。
4.Background:
应用处在后台,并且还在执行代码。大多数将 要进入Suspended状态的应用,会先短暂进入此状态。然而,对于请求需要额外的执行时间的应用,会在此状态保持更长一段时间。另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从Notrunning状态进入Background状态,中途不会经过Inactive状态。比如没有界面的应用。注此处并不特指没有界面的应用,其实也可以是有界面的应用,只是如果要直接进入background状态的话,该应用界面不会被显示。
5.Suspended:
应用处在后台,并且已停止执行代码。系统自动的将应用移入此状态,且在此举之前不会对应用做任何通知。当处在此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生低内存告警时,系统将会将处 于Suspended状态的应用清除出内存以为正在前台运行的应用提供足够的内存。