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

Mai*_*r00 9 objective-c uiviewcontroller uiview viewdidload ios

阅读关于iOS开发的几本教程和书籍我经常遇到一些术语:UIViewController生命周期和UIView生命周期.我很感兴趣:这两个术语之间是否存在实际差异?看苹果的文档我发现,如方法viewDidAppear或者loadView是视图控制器的生命周期的一部分,但我认为这是比较正确的,指他们作为视图生命周期和方法,如initWithNibNamedealloc作为控制器的生命周期.或者没有这样的分离,当有人谈到观看生命周期时,他实际上意味着UIViewController生命周期?

Tia*_*ida 17

两者都是不同的概念,因此具有不同的生命周期.

的UIViewController

ViewController是MVC架构中的Controller .因此,它负责协调模型(您的数据)和您的视图之间的信息.UIViewControllers协调UIViews并且是屏幕(pushViewController,presentViewController)之间导航的一部分.因此,它需要知道它何时出现在屏幕上.

A UIViewController具有非常特定的生命周期,并且它具有可以扩展的方法,这些方法是生命周期的一部分.这些方法的例子是:

viewDidLoad,viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear

视图

另一方面,当它必须出现在屏幕上时,不应该担心.因此,它具有完全不同的生命周期:

awakeFromNib,willMoveToSuperView,didMoveToSuperView

这种方法通常按UIViewController's生命周期的顺序调用.因此,通常,UIView响应变化,人们不认为他们自己有生命周期.

ViewController的生命周期只有在类扩展时才有意义,UIViewControllerUIView生命周期只有在扩展时才有意义UIView.

大多数时候,当人们谈论生命周期时,他们会谈论UIViewController生命周期,因为View通常会对变化作出反应.这些更改的两个示例是:视图更改其大小,更改其父级.

  • 一般来说,你的答案是正确的,但有点过时了.从iOS 6开始,UIViewController永远不会在内存不足的情况下从内存中清除其视图.特别是,从不调用viewWillUnload和viewDidUnload方法.[文档](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/viewDidUnload). (3认同)

Ear*_*rey 17

一旦你完全意识到两个班级之间的差异并将其纳入你的思想(通过实践),你的所有困惑都会消失

UIViewController - 一个本身没有UI的类(虽然不是完全正确的......见根视图),其目的是控制视图并做一些相关的事情.它就像一个警察或交通管制员监管其他人.(观点).大多数情况下,您创建自己的UIViewController子类,并且该类在功能上往往非常沉重

  • 处理逻辑规则何时显示哪个视图
  • 连接到模型层(关于您的应用正在解决的问题的数据和事实)
  • 与其他控制器交互,

UIView - 一个表示可以在视觉上进行大量修改的矩形区域的类,但最重要的是,它在屏幕上可见,并且可以有子视图,也可以UIViews.视图按视图层次结构组织.大多数情况下,您自定义视图

  • 视觉上赏心悦目
  • 通过autolayout处理它的子视图
  • 表示您需要的特定类型的视觉信息经常被子类化为更具体的视图类,如标签,文本,按钮等.

混淆新手的一点是每个视图控制器都有一个根视图,一个保存UIView实例的属性.通常,您可能会对是否讨论此根视图或讨论视图控制器感到迷茫.在开发人员之间的因果讨论中,这两个词有时可以互换使用.


控制器和视图都具有生命周期,但您不能混淆这两者.

ViewController生命周期是控制器本身发生的事情,比如它从nib文件中唤醒,或者收到低内存警告,但主要是关于它的根视图如何生命,它如何消失和死亡......

视图生命周期是关于视图如何布置其子视图以及它如何呈现其内容.


我喜欢视觉类比..简单地想象一个有很多彩色纸矩形的警察.警察是控制者,他说什么(视图)显示在屏幕上.

控制器和View是(模型视图控制器)MVC架构模式的一部分的抽象.我建议您立即研究,以便在您的脑海中进一步清除生命周期混乱的问题.