IOS视图控制器的生命周期实例详解

IOS视图控制器

所谓的生命周期,也就是几个函数的调用顺序,这里以用Storyboard来创建一个ViewController为例

然后我们测试如下代码

//
// ViewController.m
//
// Created by huangwenchen on 14/12/26.
// Copyright (c) 2014年 huangwenchen. All rights reserved.
// 

#import "ViewController.h" 

@interface ViewController () 

@end 

@implementation ViewController 

- (id)initWithCoder:(NSCoder *)aDecoder{
  if (self = [super initWithCoder:aDecoder]) {
    NSLog(@"initWithCoder Called");
  }
  return self;
}
- (void)viewDidLoad {
  [super viewDidLoad];
  NSLog(@"viewDidLoad Called");
  // Do any additional setup after loading the view, typically from a nib. 

}
- (void)viewWillAppear:(BOOL)animated{
  [super viewWillAppear:animated];
  NSLog(@"viewWillAppear Called");
} 

-(void)viewDidAppear:(BOOL)animated{
  [super viewDidAppear:animated];
  NSLog(@"viewDidAppear Called"); 

} 

-(void)awakeFromNib{
  NSLog(@"awakeFromNib Called");
} 

-(void)viewWillLayoutSubviews{
  NSLog(@"viewWillLayoutSubviews Called");
}
-(void)viewDidLayoutSubviews{
  NSLog(@"viewDidLayoutSubviews Called");
} 

@end

然后,在模拟器上运行,输出为

2014-12-29 19:42:47.904 KVCForCSDN[2370:126741] initWithCoder Called
2014-12-29 19:42:47.907 KVCForCSDN[2370:126741] awakeFromNib Called
2014-12-29 19:42:47.927 KVCForCSDN[2370:126741] viewDidLoad Called
2014-12-29 19:42:47.927 KVCForCSDN[2370:126741] viewWillAppear Called
2014-12-29 19:42:47.961 KVCForCSDN[2370:126741] viewWillLayoutSubviews Called
2014-12-29 19:42:47.963 KVCForCSDN[2370:126741] viewDidLayoutSubviews Called
2014-12-29 19:42:47.970 KVCForCSDN[2370:126741] viewDidAppear Called

所以,调用顺序为

1 init函数(init;initWithFrame;initWithCoder;等)--初始化
2 awakeFromNib--在loadView之前的工作放在这里
3 viewDidLoad--注意,一个ViewController一个生命周期内这个函数只会调用一次
4 viewWillAppear -- view将要出现,每次View消失再出现都会调用
5 viewWillLayoutSubviews--简要对子试图进行布局
6 viewDidLayoutSubivews--完成对子试图布局
7 viewDidAppear--视图将要出现在屏幕上

---上述代码不含部分

8 viewWillDisappear--View将要消失
9 viewDidDisappear--View已经消失

这九个就是通常的视图控制器生命周期内函数调用顺序,一定要清楚什么样的代码应该放在视图控制器生命周期的什么位置
BTY:

didReceiveMemoryWarning

这个函数通常也在生命周期的考虑范围内,当内存不足时候会调用,这时候应当进行适当的内存释放,不然iOS会强制关闭当前的APP

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 老生常谈iOS应用程序生命周期

    开发应用程序都要了解其生命周期. 今天我们接触一下iOS应用程序的生命周期, iOS的入口在main.m文件: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致.UIAppli

  • IOS视图控制器的生命周期实例详解

    IOS视图控制器 所谓的生命周期,也就是几个函数的调用顺序,这里以用Storyboard来创建一个ViewController为例 然后我们测试如下代码 // // ViewController.m // // Created by huangwenchen on 14/12/26. // Copyright (c) 2014年 huangwenchen. All rights reserved. // #import "ViewController.h" @interface Vie

  • Vue组件和Route的生命周期实例详解

    先讲点实际的 实用点的钩子: Created:vue实例被生成后的一个生命周期钩子函数.(页面初始化数据加载一般写这里); beforeCreate:给个loading界面 created撤销loading; beforeDestory:你确认删除XX吗? destoryed:当前组件已被删除,清空相关内容 关于Vue组件生命周期,翻译后图示: module.exports = { //props: ['父组建传的值'], data:function(){ lifecycle.push("dat

  • Android编程之基于Log演示一个activity生命周期实例详解

    本文实例讲述了Android编程之基于Log演示一个activity生命周期.分享给大家供大家参考,具体如下: 利用Android的Log 演示一个activity的生命周期 代码: //DemoActivity.java package uni.activity; /* @author octobershiner 2011 7 22 SE.HIT */ import android.app.Activity; import android.os.Bundle; import android.u

  • Android编程中activity的完整生命周期实例详解

    本文实例分析了Android编程中activity的完整生命周期.分享给大家供大家参考,具体如下: android中 activity有自己的生命周期,对这些知识的学习可以帮助我们在今后写程序的时候,更好的理解其中遇到的一些错误.这篇文章很长,希望不要耽误大家的时间- 今天不会涉及太多关于activity栈的东西,主要说activity自身的生命周期 区分几个概念 1 Activity 官方解释为 "An Activity is an application component that pro

  • IOS 开发中画扇形图实例详解

    IOS 开发中画扇形图实例详解 昨天在做项目中,遇到一个需要显示扇形图的功能,网上搜了一下,发现code4app里面也没有找到我想要的那种类似的效果,没办法了,只能自己学习一下如何画了. 首先我们需要了解一个uiview的方法 -(void)drawRect:(CGRect)rect 我们知道了这个方法,就可以在自定义UIView的子类的- (void)drawRect:(CGRect)rect里面绘图了,关于drawrect的调用周期,网上也是一找一大堆,等下我会整理一下,转载一篇供你们参考.

  • iOS新功能引导提示界面实例详解

    在开发中,现在很多app更新了新功能时都会给出用户一个提示,以方便用户更好的体验,那么这个功能如何实现的呢? 首先看下效果图: 1.首先创建第一个viewcontroller 在上面放上一个imageview和一个按钮 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *imageview=[[UIImageView alloc]ini

  • 微信小程序视图template模板引用的实例详解

    微信小程序视图template模板引用的实例详解 WXML 提供两种文件引用方式import和include. include可以将目标文件除了的整个代码引入,相当于是拷贝到include位置 temlate.wxml <template name="tmp_data" > <view class="content"> <!-- 头像 --> <view class="author-date"> &

  • Java线程的生命周期的详解

    Java线程的生命周期的详解 对于多线程编程而言,理解线程的生命周期非常重要,本文就针对这一点进行讲解. 一.线程的状态 线程的存在有几种不同的状态,如下: New状态 Ready状态 Running状态 Dead状态 Non Runnable状态 1.New状态 New状态是线程已经被创建,但是还未开始运行的状态.此状态通过调用线程的start()方法可让线程运行. 2.Runnable状态 Runnable状态可称为准备运行状态,也可称为队列,此状态通过调用线程的start()方法可让线程运

  • Vue生命周期区别详解

    生命周期分类 vue每个组件都是独立的,每个组件都有一个属于它的生命周期, 从一个组件创建.数据初始化.挂载.更新.销毁,这就是一个组件所谓的生命周期. 在组件中具体的方法有: beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed beforeCreate( 创建前 ) 在实例初始化之后,数据观测和事件配置之前被调用,此时组件的选项对象还未创建,el 和 data 并未初始化,因

  • Android bindService的使用与Service生命周期案例详解

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况.如果想了解startService相关的使用,请参见<Android中startService的使用及Service生命周期>. bindService启动服务的特点 相比于用startService启动的Service,bindService启动的服务

随机推荐