1.Application常用的生命周期方法
//应用程序完成启动时执行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
//应用程序进入后台后执行
- (void)applicationDidEnterBackground:(UIApplication *)application ;
//应用程序从后台进入前台时执行
- (void)applicationWillEnterForeground:(UIApplication *)application ;
//应用程序处于激活状态,此时可接受用户触摸事件时执行
- (void)applicationDidBecomeActive:(UIApplication *)application;
//应用程序处于未激活状态,此时不能接受用户触摸事件(在应用进入后台前,会先进入此状态,或者弹出Alert窗体时)
- (void)applicationWillResignActive:(UIApplication *)application;
//应用程序退出时执行
- (void)applicationWillTerminate:(UIApplication *)application;
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"application: didFinishLaunchingWithOptions:.......");
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"applicationWillResignActive:.......");
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"applicationDidEnterBackground:.......");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"applicationWillEnterForeground:.......");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"applicationDidBecomeActive:.......");
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"applicationWillTerminate:.......");
}
@end
2015-09-23 08:52:07.573 CycleTest[26189:1756070] application: didFinishLaunchingWithOptions:.......
2015-09-23 08:52:07.599 CycleTest[26189:1756070] applicationDidBecomeActive:.......
2015-09-23 08:52:57.885 CycleTest[26189:1756070] applicationWillResignActive:.......
2015-09-23 08:52:58.410 CycleTest[26189:1756070] applicationDidEnterBackground:.......
2015-09-23 08:53:52.938 CycleTest[26189:1756070] applicationWillEnterForeground:.......
2015-09-23 08:53:53.457 CycleTest[26189:1756070] applicationDidBecomeActive:.......
4.此时双击home键:2015-09-23 08:56:58.341 CycleTest[26189:1756070] applicationWillResignActive:.......
5.然后退出应用程序:2015-09-23 08:57:33.072 CycleTest[26189:1756070] applicationDidEnterBackground:.......
2015-09-23 08:57:37.579 CycleTest[26189:1756070] applicationWillTerminate:.......
按照上面过程没有问题!
但是发现如果在第2步后双击home键,不执行任何方法,然后退出应用程序并没有执行applicationWillTerminate:,没有输出。
所以退出应用前要保存数据的操作不要放到applicationWillTerminate:中。
2.ViewController常用的生命周期方法
//在ViewController的view被加载到内存后调用,在ViewController生命周期中只调用一次
- (void)viewDidLoad;
//在view将要显示时调用
- (void)viewWillAppear:(BOOL)animated;
//在view完全显示时调用
- (void)viewDidAppear:(BOOL)animated;
//在view将要消失时调用
- (void)viewWillDisappear:(BOOL)animated;
//在view完全消失时调用
- (void)viewDidDisappear:(BOOL)animated;
// Called just before the view controller's view's layoutSubviews method is invoked.
- (void)viewWillLayoutSubviews;
// Called just after the view controller's view's layoutSubviews method is invoked.
- (void)viewDidLayoutSubviews;
//当内存不足时会执行此方法,我们通常重写此方法,在里面释放掉不需要的内存空间
-(void)didReceiveMemoryWarning
简单的做个测试吧:代码如下
<pre name="code" class="objc">- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad..........");
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"viewWillAppear.........");
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"viewDidAppear.........");
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"viewWillDisappear........");
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"viewDidDisappear.......");
}
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
NSLog(@"viewWillLayoutSubviews..........");
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
NSLog(@"viewDidLayoutSubviews..........");
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
在ViewController第一次被加载时输出如下:
2015-10-04 17:00:20.445 meituan[746:107000] viewDidLoad..........
2015-10-04 17:00:20.445 meituan[746:107000] viewWillAppear.........
2015-10-04 17:00:20.446 meituan[746:107000] viewWillLayoutSubviews..........
2015-10-04 17:00:20.446 meituan[746:107000] viewDidLayoutSubviews..........
2015-10-04 17:00:20.448 meituan[746:107000] viewDidAppear.........
切换到其他界面时输出:
2015-10-04 17:02:20.745 meituan[746:107000] viewWillDisappear........
2015-10-04 17:02:20.749 meituan[746:107000] viewDidDisappear.......
再回到这个界面时输出:2015-10-04 17:03:00.274 meituan[746:107000] viewWillAppear.........
2015-10-04 17:03:00.275 meituan[746:107000] viewDidAppear.........
可以看到viewDidLoad仅且仅仅执行了一次,viewWillLayoutSubviews和viewDidLayoutSubviews是随viewController的view的layoutSubviews方法执行的,只要view的布局改变就会执行这两个方法通知viewController,例如执行了setNeedsDisplay方法重绘视图、设备旋转等