iOS Application 和 ViewController的生命周期

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


1.打开应用程序时输出结果:

2015-09-23 08:52:07.573 CycleTest[26189:1756070] application: didFinishLaunchingWithOptions:.......

2015-09-23 08:52:07.599 CycleTest[26189:1756070] applicationDidBecomeActive:.......


2.然后点击Home键应用进入后台:

2015-09-23 08:52:57.885 CycleTest[26189:1756070] applicationWillResignActive:.......

2015-09-23 08:52:58.410 CycleTest[26189:1756070] applicationDidEnterBackground:.......


3.然后再点击应用,应用从后台进入前台:

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方法重绘视图、设备旋转等

 
 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值