视图控制器的生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图控制器的生命周期相关的知识,希望对你有一定的参考价值。

  补充: NSLog(@"%s",__func__);//这句话可以打印什么类中的什么方法
 
   一     什么是视图控制器
(1)视图控制器就是用来“控制”或者“管理”界面(视图)的
       控制器就是创建控件和给控件传递数据的
         “换句话说界面长得丑与美由视图控制器说的算”
(2)每个视图控制器(UIViewController)都有一个View属性来描述界面长什么
 
 二 视图控制器的创建方式
(1)UIStoryboard的方式
      UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  *1  获取storyboard箭头所指的视图控制器
ViewController *vc = [storyboard instantiateInitialViewController];
  *2  获取storyboard标识了ID所指的视图控制器
 ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"haha"];
(2)直接创建控制器
   ViewController *vc2 =[[ViewController alloc]init];
(3)创建带xib的视图控制器
  ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
  * 调用控制器的【-(instancetype)initWithNibName:bundle:】;
 
"【总结视图控制器的View创建的流程】"
如果控制器是从storyboard创建,loadView从storyboard加载
如果控制器是自己创建,加载xib,没有xib,自己创建一个空白的view
 
 
 三  控制器的生命周期
(1)理解控制器的生命周期的几个方法
*1 视图控制器初始化的时候调用这个方法(复写这三种方法都要父类调用)
- (id)initWithCoder:(NSCoder *)aDecoder;//创建视图控制器
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
-(id)init;
 
*2当使用视图控制器上的view的时候用这两个方法(使用其他的view不会调用)
 loadView//视图的自定义
注:当程序中的控件加载完毕时的时候自动调用ViewDidLoad
viewDidLoad //view加载完毕
 注:view的懒加载:啥时候使用view,啥时候调用这两个方法;(这个是把view样式加载到内存中,viewWippAppear的目的是按照view样式渲染到屏幕上)
 
 *3 当视图显示的时候调用这个两个方法(即开始显示在窗口的时候开始调用       )
viewWillAppear//view即将显示
viewDidAppear//view已经显示
viewWillDisappear//view即将消失
viewDidDisappear//view已经消失
viewWillUnload//view即被卸载
viewDidUnload//view已经卸载
dealloc//控制器被销毁
补充1:
    如果控制器不消失的话,一般不会执行viewWillUnload,(除非内存警告)
补充2:
     使用xib创建的视图
   MyView *view1 = [[[NSBundle mainBundle]loadNibNamed:@"View" owner:nil options:nil]lastObject];
#import "MyView.h"

@implementation MyView
当是视图初始化的时候调用这个方法
-(void)awakeFromNib{
    [super awakeFromNib];
    NSLog(@"%s",__func__);
}
 
@end
 
 
技术分享
 
生命周期方法
 
技术分享
 
 
 
 
 
技术分享
 
 
iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途
 

init-初始化程序

viewDidLoad-加载视图

viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

 
viewDidUnload-当内存过低,释放一些不需要的视图时调用。
 
 
视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。

以上是关于视图控制器的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

iOS中视图控制器生命周期和视图生命周期有啥区别?

安卓活动的生命周期

在视图控制器生命周期中添加子视图的位置

[ IOS ] 视图控制对象ViewController的生命周期

与初始视图控制器的视图生命周期方法相关的 appdelegate 方法何时被调用? [关闭]

iOS 5.0 查看生命周期问题