Controller生命周期问题

生命周期

Controller视图控制器在iOS程序中非常的常见, 每个controller在创建视图的时候,会调用loadView方法, 该方法的作用是给controll加载一个视图,并且该视图是透明的

viewController一般可以分为两类:

展示类controller: 用于显示UI界面,可以用来继承.常用的只有UIViewController和UITableViewController可以被继承

容器类controller: UINavigationController 和UITabBarController.两者都具有Controllers的属性. UINavigationController 是一种栈式的结构,push和pop. 一般控制器之间具有依赖关系. UITabBarController中的控制器是数组的排列方式.

// 初始化控制器
- (instancetype)init {
    
    self = [super init];
    return self;
}

// 在调用loadview之前,当前控制器是没有view的
- (void)loadView {
    [super loadView];
    
    //加载控制器自带的view视图,此方法一般情况下不需要重写
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // 当控制器自带视图加载完毕后,调用此方法
    // 此时view即将限时,此时的superview一般是nil
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // 视图即将显示
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // view已经显示
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // view 即将消失,此时还没有调用removeFromSuperView
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    // 此时view已经从superview中移除了
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // view从内存中消失
}

// 控制器释放,此方法由系统内部实现,在ARC中程序员不能自行释放
- (void)dealloc {
    [super dealloc];
}

1, 如果我们不重写loadView,系统会默认实现loadView方法给controller自动创建一个透明视图

2, 如果我们重写了loadView ,就必须给controller设置视图,否则会死循环(也可在viewDidload中设置这个view,只要设置了,程序就不会出现死循环).在viewDidLoad方法中,如果检测不到视图,就会不断调用loadView, 这个时候就会出现死循环

Controller生命周期问题_第1张图片
视图的生命周期.jpeg

MVC

MVC 是一个框架级的设计模式,其核心为controller控制器层

  • M model 数据层 负责数据的映射,提供数据
  • V view 视图层 负责数据的展示,UI渲染等
  • C controller 控制器层 负责处理用户操作,model层和view层通讯,屏幕旋转,内存警告等

你可能感兴趣的:(Controller生命周期问题)