阅读几本关于iOS开发的教程和书籍,我经常会遇到术语:UIViewController生命周期和UIView生命周期。我感兴趣的是:这两个术语之间有实际区别吗?查看Apple,我发现viewDidAppear或loadView等方法是视图控制器生命周期的一部分,但我认为将它们称为视图生命周期和将initWithNibName或dealloc等方法称为控制器生命周期更为正确。或者没有这样的分离,当有人谈到视图生命周期时,他实际上是指UIViewController生命周期?
发布于 2015-02-25 17:39:31
一旦你充分意识到两个类之间的区别,并将它融入你的脑海(通过实践),你的所有困惑就会消失。
UIViewController --一个本身没有UI的类(不是完全真实的though...see根视图),它的目的是控制视图,并做一些相关的stuff..It,就像警察或交通控制器控制其他人一样。(视图)。大多数时候,您都会创建自己的UIViewController子类,而且该类的功能往往很重,例如
UIView --一个表示(矩形区域)的类,它可以被大量视觉化修改,但最重要的事实是,它在屏幕上是可见的,并且可以有子视图,这些子视图也是UIViews。视图被组织成视图层次结构。大多数情况下,您可以自定义视图,使其成为
让新来者感到困惑的一点是,每个视图控制器都有一个根视图,这是一个包含UIView实例的属性。通常,您可能不知道是否讨论了这个根视图,还是讨论了视图控制器。在开发人员之间的因果讨论中,这两个词有时可以互换使用。
两个控制器和视图都有生命周期,但您不能混淆这两者。
ViewController生命周期是指控制器本身所发生的事情,就像它从nib文件中醒来一样,或者收到内存不足的警告,但主要是关于它的根视图是如何出现的,它是如何消失和死亡的。
视图生命周期是关于视图如何布局它的子视图,以及它如何呈现它的内容。
我喜欢视觉类比..。简单地想象一个警察有很多五颜六色的纸矩形。警察是控制器,他说什么(视图)显示和什么时候在屏幕上。
控制器和视图是模型视图控制器(Model ) MVC体系结构模式的一部分,我建议您立即研究这一点,以便进一步解决生命周期混淆的问题。
发布于 2015-02-25 17:24:09
和都是不同的概念,因此具有不同的生命周期。
UIViewController
ViewController是MVC architecture中的控制器。因此,它负责协调模型(数据)和视图之间的信息。UIViewControllers协调UIViews,是屏幕之间导航的一部分(pushViewController,presentViewController)。因此,它需要知道何时它将出现在屏幕上。
UIViewController有一个非常特定的生命周期,它有可以扩展的方法,这些方法是该生命周期的一部分。这些方法的例子如下:
viewDidLoad,viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear
视图
另一方面,当一个视图出现在屏幕上时,它不应该担心。因此,它有一个完全不同的生命周期:
awakeFromNib,willMoveToSuperView,didMoveToSuperView
life cycle。因此,通常情况下,UIView会对变化做出响应,人们并不认为自己有一个生命周期。
ViewController的生命周期只有在类扩展UIViewController时才有意义,而UIView的生命周期只有在扩展UIView时才有意义。
大多数情况下,当人们谈论生命周期时,他们会谈论UIViewController生命周期,因为视图通常会响应变化。这些更改的两个示例是:视图更改了其大小,更改了其父视图。
发布于 2015-02-25 23:27:18
添加这些答案,并将更多的注意力放在您的确切问题上:
我感兴趣的是:这两个术语之间有实际区别吗?
是的,两者是不同的,但是在处理UIViewController's根UIView的上下文中,它们在某种程度上是相关的。
查看Apple,我发现viewDidAppear或loadView等方法是视图控制器生命周期的一部分,但我认为将它们称为视图生命周期更正确,而将initWithNibName或dealloc等方法称为控制器生命周期更为正确。
这就是为什么它们是相关的:
viewWillAppearviewDidAppearviewWillDisappearviewDidDisappear:它们都在下,响应文档中的查看事件。因此,这些是从UIView到UIViewController的回调,告诉它它的状态。虽然:
loadViewviewDidLoad不在同一部分(在文档中),而是UIView请求/告知UIViewController其当前状态。还有这些交互的其他例子,例如:
viewWillLayoutSubviewsviewDidLayoutSubviews在某种程度上(在你的问题的上下文中),一般的答案是:是的,这是两个不同的生命周期,具有不同的特殊性,但它们在某种程度上是相互关联的。UIViewController的didReceiveMemoryWarning不是直接相关的例子(我直接说,因为间接地,可能是UIViewController的根UIView是罪魁祸首)。
https://stackoverflow.com/questions/28725481
复制相似问题