当前位置: 首页 > news >正文

iphone应用程序生命周期浅析

  做iphone开发有必要知道iphone程序的生命周期,说白点就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么,只有理解生命周期,有利于我们开发人员开发出更棒的应用

接下来从系统自带的项目模版-单视图应用模版来分析iphone应用生命周期,系统创建的这个应用启动后就一个view,上面什么都不显示,大家都懂得

下面贴两张图来描述一下应用程序的生命周期

两张图片要表达的意思都是差不多,当用户点击一个图标的时候,程序开始运行,从main函数开始,

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

main函数当中

UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])这句话的意思是创建一个UIApplication对象,并设置他的委托类,这里第三个参数nil表示默认的是创建一个UIApplication对象,也可以写成UIApplication的子类,紧跟在后面的参数意思是设置UIApplication对象的委托,

在UIApplicationMain内部,实现了类似的代码

UIApplication *app = [[UIApplication alloc] init];
UIApplicationDelegate *delegate = [[UIApplicationDelegate alloc] init];
app.delegate = delegate;

UIApplication对象类似于总司令,UIApplication对象的委托就类似于他手下,总司令只需指挥,有事手下干,
UIApplication对象创建后直到程序结束前,他以单例的形式存在,可以通过[[UIApplication sharedApplication]delegate]来获取他的代理类,如下面代码

AppDelegate * delegate = (AppDelegate *)[[UIApplicationsharedApplication]delegate];

UIApplication对象创建好了,其委托也设置好了,下面看看他的委托(手下)都做了些什么事,进入AppDelegate.m中看

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个消息类似于jQuery的ready事件,告诉你一切准备就绪,你可以开始了.也可以形象的比喻成,好比总统宣誓就任,你可以决定提议国务卿和内阁组成,以及美联储主席等要职的安排等.

applicationWillTerminate

这个预示程序就要结束.

映射为当前程序王国的总统,就是你的任期到了,要做交接处理了.现在ios的应用可以支持后台运行了,这个方法用的较少,不像早期的时候,当用户点击home的时候,应用程序直接结束了,会调用这个方法,现在点击home后,应用程序转到后台处理

- (void)applicationWillResignActive:(UIApplication *)application

说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了

- (void)applicationDidBecomeActive:(UIApplication *)application

说明:当应用程序进入活动状态执行,这个刚好跟上面那个方法相反

- (void)applicationDidEnterBackground:(UIApplication *)application

说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可,比如用户按下home去去做别的事情,程序进入后台后可以在这个函数中保存一些数据,以便用户再次从后台打开应用时方便接着玩下去,

- (void)applicationWillEnterForeground:(UIApplication *)application

说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。

 

讲解了上面的一些代理方法后,举些例子说明一下方法被调用的顺序

当用户点击图标后 调用

1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

2.  applicationDidBecomeActive  程序已经处于活跃状态了,

程序开着的情况下用户按了home后,程序进入后台调用

1.applicationWillResignActive

2.applicationDidEnterBackground

当用户从后台点击图标再次打开应用

1.applicationWillEnterForeground

2.applicationDidBecomeActive

提示:

在支持后台执行的程序中,applicationDidEnterBackground:替代了applicationWillTerminate:作为程序快照保存的事件.(现在应用基本都支持后台执行了)

 



 

 

 



 

 

转载于:https://www.cnblogs.com/X-Code/archive/2013/01/26/2877440.html

相关文章:

  • Stack Gallery View
  • 文件与二进制流互转
  • 编译与链接的问题 gcc -fPIC -shared
  • PHP为什么会被认为是草根语言?
  • 希腊神话确实是人类精神文明的宝藏
  • 2013应届毕业生“人人网”校招应聘总结
  • ABAP SY标签一览表
  • 选择排序与冒泡排序
  • 补一篇,Update Rollup 12 终于发布了
  • SQL查询重复记录
  • 雅思_百度百科
  • 开源实时流处理系统小结
  • [转]Resetting and pausing target processor: FALSE 错误的解决
  • 领域驱动设计与模式实战文摘
  • onchange事件学习
  • Android组件 - 收藏集 - 掘金
  • C++类的相互关联
  • C学习-枚举(九)
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java比较器对数组,集合排序
  • Java小白进阶笔记(3)-初级面向对象
  • STAR法则
  • storm drpc实例
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue-loader 源码解析系列之 selector
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开源地图数据可视化库——mapnik
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端之Sass/Scss实战笔记
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 手机端车牌号码键盘的vue组件
  • 系统认识JavaScript正则表达式
  • 追踪解析 FutureTask 源码
  • 最简单的无缝轮播
  • Android开发者必备:推荐一款助力开发的开源APP
  • elasticsearch-head插件安装
  • Prometheus VS InfluxDB
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • (0)Nginx 功能特性
  • (1)STL算法之遍历容器
  • (C++)八皇后问题
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (第二周)效能测试
  • (转)平衡树
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Core 项目指定SDK版本
  • .net 后台导出excel ,word
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET应用架构设计:原则、模式与实践 目录预览