ios应用启动过程及生命周期分析
2015-03-11 14:35
471 查看
跟所有基于C的程序一样,ios应用的入口为main函数,函数的代码通常如下:
其中,argc(argument count的简称)指代参数的个数;argv(argument variable的简称)指代每个参数;principalClassName指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则从info.plist中读取键为NAPrincipalClass的值,如果info.plist中没有此键,则默认为UIApplication;delegateClassName即为代理类的名字,在新建工程时创建。
在AppDelegate中,常用的几个代理方法如下:
Launch time --
application:willFinishLaunchingWithOptions:—在应用加载阶段第一次调用
application:didFinishLaunchingWithOptions:—加载结束阶段调用,执行完毕后应用即进入活动状态
Transitioning
to the foreground --
applicationDidBecomeActive:—首先在应用进入活动阶段后调用,应用即将进入前台运行
Transitioning
to the background --
applicationDidEnterBackground:—应用进入后台后调用,可在此加入后台运行的相关代码
Transitioning
to the inactive state --
applicationWillResignActive:—当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,包括来电
applicationWillEnterForeground:—当程序从后台将要重新回到前台时候调用
Termination
--
applicationWillTerminate:—应用要退出时调用,需要要设置UIApplicationExitsOnSuspend的键值
应用的生命周期中,函数的执行顺序为:
启动程序:
application:willFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
按下HOME键:
applicationWillResignActive:
applicationDidEnterBackground:
双击HOME键,点击程序进入前台:
applicationWillEnterForeground:
applicationDidBecomeActive:
苹果官方文档中给出程序的状态有5个:
Not running : 程序没有加载或者已经终止。
Inactive : 应用运行在前台,但是不接受事件响应。应用通常仅在状态切换的时候会经过这个状态,此时应用程序保持静止。
Active : 应用程序在前台运行并且接受响应事件。
Background : 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态。可通过注册特定服务长期处于Backgroud状态
Suspended : 程序驻留在内存中,不能执行代码。系统会自动把驻留在后台并且没有任务执行的应用转为这个状态。当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
状态变化图如下:
int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }UIApplicationMain的函数原型为:
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
其中,argc(argument count的简称)指代参数的个数;argv(argument variable的简称)指代每个参数;principalClassName指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则从info.plist中读取键为NAPrincipalClass的值,如果info.plist中没有此键,则默认为UIApplication;delegateClassName即为代理类的名字,在新建工程时创建。
在AppDelegate中,常用的几个代理方法如下:
Launch time --
application:willFinishLaunchingWithOptions:—在应用加载阶段第一次调用
application:didFinishLaunchingWithOptions:—加载结束阶段调用,执行完毕后应用即进入活动状态
Transitioning
to the foreground --
applicationDidBecomeActive:—首先在应用进入活动阶段后调用,应用即将进入前台运行
Transitioning
to the background --
applicationDidEnterBackground:—应用进入后台后调用,可在此加入后台运行的相关代码
Transitioning
to the inactive state --
applicationWillResignActive:—当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,包括来电
applicationWillEnterForeground:—当程序从后台将要重新回到前台时候调用
Termination
--
applicationWillTerminate:—应用要退出时调用,需要要设置UIApplicationExitsOnSuspend的键值
应用的生命周期中,函数的执行顺序为:
启动程序:
application:willFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
按下HOME键:
applicationWillResignActive:
applicationDidEnterBackground:
双击HOME键,点击程序进入前台:
applicationWillEnterForeground:
applicationDidBecomeActive:
苹果官方文档中给出程序的状态有5个:
Not running : 程序没有加载或者已经终止。
Inactive : 应用运行在前台,但是不接受事件响应。应用通常仅在状态切换的时候会经过这个状态,此时应用程序保持静止。
Active : 应用程序在前台运行并且接受响应事件。
Background : 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态。可通过注册特定服务长期处于Backgroud状态
Suspended : 程序驻留在内存中,不能执行代码。系统会自动把驻留在后台并且没有任务执行的应用转为这个状态。当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
状态变化图如下:
相关文章推荐
- IOS应用的启动过程与生命周期
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
- iOS应用启动速度分析
- 架构设计三之app应用的启动过程分析
- Spark Streaming应用启动过程分析
- Android系统应用层App启动过程分析
- 从 C 语言的 main 入手看 iOS 应用启动过程及进化
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
- iOS-关于应用/视图的生命周期及程序启动原理小结
- Spark Streaming应用启动过程分析
- Android 8.0系统源码分析--应用进程启动过程分析
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
- IOS温故而知新(一) 一步一步分析新建App启动过程
- Firefox OS启动过程分析-system应用启动
- Android6.0的应用进程启动过程部分分析
- 【IOS6.0 自学瞎折腾】(五)应用程序的启动过程和Application生命周期
- iOS复习笔记16:应用启动过程和工程结构
- 源码分析Android 应用进程的启动过程
- IOS应用启动过程
- iOS 应用启动过程