【iOS开发-4】UIApplication生命周期以及如何简单测试每个函数何时被调用?

应用程序的生命周期也就是程序在前台和后台以及正在前往后台和前往前台的路上的不同状态,这些不同状态是由不同函数控制的,当然每个函数的作用也不同,比如正在前往后台时可能需要暂停程序进行,进入后台后需要保存一些数据以便再恢复,即将进入前台时需要恢复一些数据,进入前台了可能需要刷新一下用户界面等等。至于详细情况,每一段有个英文解释,耐心看即可。

如何测试呢?思路就是我们模拟进入和退出程序时,系统会调用这些函数(当然这些函数目前里面没内容),我们可以让这些函数把自己的名字打出来,这样我们就能知道我们做什么动作时调用的是哪个函数。_cmd表示当前函数。所以下面每个函数里增加一个打印当前函数即可:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Override point for customization after application launch.
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"%@",NSStringFromSelector(_cmd));
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

我们按CMD+R进行测试应用程序时,会直接进入程序里,这个时候发现已经调用了2个函数,第一个当然是didFinishLaunchingWithOptions,因为它是程序入口,其次是applicationDidBecomeActive。

然后我们就按CMD+SHIFT+HOME进入主界面发现调用了2个函数,applicationWillResignActive和applicationDidEnterBackground。点击进入应用程序发现也调用了2个函数,applicationWillEnterForeground和applicationDidBecomeActive。这就是我们常用的4个函数。

按CMD+SHIFT+M模拟内存警告发现调用applicationDidReceiveMemoryWarning(这个函数在默认创建的模板中没有,我们手动添加即可)。

但是applicationWillTerminate一直没被调用,原因:这个函数只有在iOS4.0之前用处很大,因为那个时候不能多任务执行,退出一个程序就意味着关闭终止。但现在尽管我们退出一个程序,但它还是在后台并没有关闭,所以这个函数用得比较少。如果实在要用,我们可以在Info.plist中增加一个选项(意思是不让在后台运行,那也就是进入后台即关闭):

这个时候进入后台,我们发现调用了3个函数,其中多了applicationWillTerminate这个函数。

好习惯:测试完记得把上面Info.plist中增加选项删除哦!

时间: 2025-01-18 02:47:01

【iOS开发-4】UIApplication生命周期以及如何简单测试每个函数何时被调用?的相关文章

iOS开发-ViewController的生命周期和切换

ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是ViewController管理比如NavigationController和UITabBarController,另外一种就是我们经常打交道用到的自定义ViewController或者是常用UITableViewController展示我们需要的数据.下面这种苹果官网的图片可以加强理解: 生命周期

iOS开发-程序的生命周期

为了更好的管理程序,了解程序的生命周期是很有必要的. 运行结果: 1.首次启动: 2015-05-26 17:33:28.362 Live[4858:214241] 程序开始 2015-05-26 17:33:28.627 Live[4858:214241] 程序再次激活 2.按HOME键退出: 2015-05-26 17:35:33.335 Live[4858:214241] 程序暂停 2015-05-26 17:35:33.970 Live[4858:214241] 程序进入后台 3.再次进

iOS开发 - 控制在生命周期内只运行一次

在app 中往往有的程序只需要运行一次即可,比如广告弹框等 代码实现 #define UD [NSUserDefaults standardUserDefaults] if (![UD boolForKey:@"everLaunched"]) { [UD setBool:YES forKey:@"everLaunched"]; [UD setBool:YES forKey:@"firstLaunch"]; } else{ [UD setBool:

iOS学习笔记—ViewController/生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

【iOS】app的生命周期

对于iOS应用程序,关键的是要知道你的应用程序是否正在前台或后台运行.由于系统资源在iOS设备上较为有限,一个应用程序必须在后台与前台有不同的行为.操作系统也会限制你的应用程序在后台的运行,以提高电池寿命,并提高用户与前台应用程序的体验.当应用程序在前台和后台之间切换时,操作系统将会通知您的应用程序.你可以通过这些通知来修改你的应用程序的行为. 当你的应用程序在前台活动时,系统会发送触摸事件给它进行处理.在UIKit的基础设施做了大部分的事件传递给你的自定义对象工作.所有您需要做的是覆盖在相应的

iOS 应用程序的生命周期详解

今天看了一下午的iOS 应用程序的生命周期,本来对这些只是大概的了解,并没有深入的去了解他,,所以也没有太在意,今天突然觉得做iOS 开发  一定要明白应用程序在整个手机系统的前台后台的运行状态.应用程序各个状态的变换,及调用的哪些方法,结合着一些资料,也开始写出我对这个的理解 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验. //开发iOS app,我们要遵循苹果公司的一些指导原则,原则如下: 1.应用程序

iOS 应用程序的生命周期(转CocoaChina)

对于iOS应用程序,关键是要知道你的应用程序是否正在前台或后台运行.由于系统资源在iOS设备上较为有限,一个应用程序必须在后台与前台有不同的行为.操作系统也会限制你的应用程序在后台的运行,以提高电池寿命,并提高用户与前台应用程序的体验.当应用程序在前台和后台之间切换时,操作系统将会通知您的应用程序.你可以通过这些通知来修改你的应用程序的行为. 当你的应用程序在前台活动时,系统会发送触摸事件给它进行处理.在UIKit的基础设施做了大部分的事件传递给你的自定义对象工作.所有您需要做的是覆盖在相应的对

[转载] iOS应用程序的生命周期

iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有app来运行,而你提供自己编写的代码来定制app的外观和行为.因此,了解iOS infrastructure和它们如何工作对编写app是很有帮助的. Main函数入口 所有基于C编写的app的入口都是main函数,但iOS应用程序有点不同.不同就是你不需要为iO

IOS 控件的生命周期

ViewController的生命周期包括: Initialize ViewDidLoad ViewWillAppear ViewDidAppear ViewWillDisappear ViewDidDisappear ViewDidUnload Dispose 对于Application来说,ViewController的每个阶段都对应了一个方法,IOS会在适当的时间调用对应的方法,因此,我们可以在每个方法中添加对应的代码来做我们想做的事.需要注意的是,这些方法都是为ViewControlle