iOS应用状态变更
应用启动周期
当应用启动时,它从未运行状态到活跃或后台状态,简单地过渡未激活状态。作为启动周期的一部分,系统为应用创建一个过程和主进程并在主进程上调用应用的主函数。来自你的Xcode项目的默认主函数及时将控制交移到UIkit框架——该框架在初始化应用和准备运行中做了大部分工作。
启动应用到前台
如果应用在后台启动——通常是处理一些后台事件,与前台的主要差异就是不管应用是否激活,都会进入后台处理事件不久后暂停。当进入后台后,系统仍会加载应用程序的用户界面文件但不会应用窗口。
下面是应用在后台启动的流程图
默认主函数
#import <UIKit/UIKit.h> |
int main(int argc, char *argv[]) |
{ |
@autoreleasepool { |
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class])); |
} |
} |
在程序启动时该干什么呢?
- 检查发布选项字典,查看为什么应用发布以及是否合理响应的信息
- 初始化应用程序的关键数据结构
- 准备应用窗口与视图显示
响应中断
处理基于警告的中断
中断发生时该怎么做呢?
- 停止定时器和其它周期性任务
- 停止任何元数据查询
- 不要初始化任何新任务
- 暂停电影回放(飞行模式下除外)
- 若当前应用为游戏,则进入暂停状态
- 减低OpenGL ES的帧速率
- 暂停任何执行非重要代码的调度或操作队列(在非活动态时可以继续处理网络请求和其它时间敏感的后台任务)
从前台移到后台
后台应用的内存使用
移除强引用的对象:
- 图形对象
- 可从磁盘加载的大媒体或数据文件
- 应用不再需要且可以之后轻松创建的任何其它对象
为帮助减轻应用的内存足迹,在应用程序移到后台时,系统会自动清理一些分配的数据。
主要运行循环
主运行循环负责处理所有用户相关的事件