ios应用启动过程及生命周期分析
来源:互联网 发布:印度农民知乎 编辑:程序博客网 时间:2024/04/30 04:28
跟所有基于C的程序一样,ios应用的入口为main函数,函数的代码通常如下:
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应用启动过程及生命周期分析
- IOS应用的启动过程与生命周期
- iOS 应用启动过程
- iOS-关于应用/视图的生命周期及程序启动原理小结
- IOS中的生命周期及加载过程
- iOS应用启动速度分析
- iOS程序的启动过程和应用程序生命周期
- Spark Streaming应用启动过程分析
- Angular 2 应用启动过程简单分析
- spring源码分析-应用启动过程
- 从 C 语言的 main 入手看 iOS 应用启动过程及进化
- android学习--Activity及应用启动过程
- TOMCAT源码分析及启动过程
- uboot源码及启动过程分析
- linux编译及启动过程分析
- 启动过程分析及FLASH操作
- iOS程序启动原理及过程
- iOS程序的启动过程及原理
- Linux进程的睡眠和唤醒简析
- Android 信号处理面面观 之 信号定义、行为和来源
- 初级makefile简介
- vs里 .sln和.suo 文件
- 可鼎装潢|专注餐饮店装修|快餐店装潢
- ios应用启动过程及生命周期分析
- leetcode第四题:Median of Two Sorted Arrays (java)
- CocoaPods安装和使用教程
- VFS与Ext2文件系统------《深入Linux内核架构》笔记
- 读码随记(1)
- PHP内核分析(二)
- 图片选图,上传,裁剪
- 【hadoop hive】hive建表报错:Specified key was too long; max key length is 767 bytes
- 江苏如顺塑业厂家供应500-250塑料周转箱塑料筐物流箱