首先应该明确的是iOS程序的几种运行状态:
Not running 未运行 程序没启动
Inactive 未激活 程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态
Active 激活 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式
Backgroud 后台 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态
Suspended 挂起 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
激活自然不用说,未激活是个什么东西?举例来说,按下home键,锁屏,拉下状态栏,进入控制中心等等都会进入未激活状态.这涉及到响应中断的问题,这里不做过多阐述
程序之间状态的切换如下图:
同时,对于不同的状态改变,iOS系统提供了相关的回调函数:
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
- (void)applicationDidFinishLaunching:(UIApplication*)application
对于面试中问到的关于声明周期的问题,能够将上述内容表达清楚便可以了.
涉及到包括应用程序启动/关闭流程,main函数的作用,程序中断和后台运行的问题可参照下列文章:
相关博文:http://blog.csdn.net/totogo2010/article/details/8048652