The Role of View Controllers 视图控制器介绍(部分翻译)

View Controllers介绍

View Controller是一个app内部结构的基础,每一个app都至少有一个View Controller,大多数是多个。每一个View Controller都管理着app中的用户对于底层数据的界面以及交互。View Controllers使得在不同的用户界面之间的转换过度变得方便。其中UIViewController类定义了管理视图,处理响应事件,从一个View Controller切换到另一个以及组织好app不同部件的方法和属性。通过UIViewController或者其子类添加客户代码来实现app的行为。

一般有两种类型的View Controllers:

  • 内容View Controller:管理你app内容中的离散的部件,这是你创建的View Controller的主要类型

  • 容器View Controllers:从其他的View Controllers中收集信息(或者说是子视图控制器),并进一步以有利于导航的方式,或者以不同方式呈现那些视图控制器内容。

大多数app都是这两种View Controllers混合使用。

视图管理

View Controller的最重要的事情就是管理视图的继承。每一个View Controller都有一个唯一的根视图(root view)囊括了所有的View Controller的内容,而你则需将你要展示的内容添加到root view中,图1-1说明了View Controller及其视图之间的内置关系。View Controller始终对根视图具有引用,并且每个视图都对其子视图具有强引用。

The Role of View Controllers 视图控制器介绍(部分翻译)_第1张图片

 

普遍采用outlets来在你的视图控制器的继承中访问其他的视图,因为一个视图控制器管理它所有视图的内容,outlets则是让你存储了你所需要的视图,当视图从storyboard中加载出来时,outlets本身自动地连接到实际的视图对象。

一个View Controller管理它所有的视图,容器视图控制器管理自己的视图以及来自其一个或多个子视图控制器的根视图。容器不管理其子级的内容。它仅管理根视图,并根据容器的设计调整大小和放置它。图1-2说明了拆分视图控制器及其子级之间的关系。拆分视图控制器管理其子视图的整体大小和位置,但是子视图控制器管理这些视图的实际内容。

The Role of View Controllers 视图控制器介绍(部分翻译)_第2张图片

 

了解关于管理你视图控制的视图的信息,见Managing View Layout。

数据封送

视图控制器充当其管理的视图与应用程序数据之间的中介。 UIViewController类的方法和属性让你可以管理应用程序的视觉呈现。子类化UIViewController时,你可以添加管理你子类数据的任何变量。添加自定义变量会创建如图1-3所示的关系,其中视图控制器具有对你的数据以及用于表示该数据的视图的引用。在这两者之间来回移动数据是你的责任。

The Role of View Controllers 视图控制器介绍(部分翻译)_第3张图片

 

你应该在你的视图控制器以及数据对象之间保持一个职能的清晰的划分,确保数据结构完整性的大多数逻辑都属于数据对象本身。视图控制器可能会验证来自视图的输入,然后以数据对象所需的格式打包这些输入,但是你应尽量减少视图控制器在管理实际数据中的作用。

UIDocument对象是一种从你视图管理器中独立出来管理你的数据的方式,一个document对象是一个知道如何读写一致性存储数据的控制对象。当你划分子类时,无论你甜姐了什么逻辑还是方法,你都需要把数据提取出来并且传递给视图控制器或者app的其他部分。视图控制器可能会存储所接受到的数据的一份拷贝,从而更方便地更新视图,但true data还是由document持有。

用户交互

视图控制器是响应程序对象,能够处理响应程序链中的事件,尽管这样,但是视图控制器很少直接处理触摸事件。相反,视图通常会处理自己的触摸事件,并将结果报告给关联的delegate或目标对象的方法,而这通常就是视图控制器。因此视图控制器的大多数事件是由delegate方法或者action方法来处理的。

有关在视图控制器中实现操作方法的更多信息,请参见 Handling User Interactions。有关处理其他类型事件的信息,请参阅Event Handling Guide for iOS.

资源管理

视图控制器负责它所有的视图以及它所创建的对象。UIViewController类自动处理视图管理的大部分内容。例如,UIKit自动释放与视图相关的不再需要的资源,在你的UIViewController子类中,则由你来管理你显式创建的对象。

当可用的可用内存不足时,UIKit会要求应用释放不再需要的任何资源。实现此目的的一种方法是调用视图控制器的didReceiveMemoryWarning方法。使用该方法可以删除对不再需要或以后可以轻松重新创建的对象的引用。例如,你可以使用该方法删除缓存的数据。当内存不足时,释放尽可能多的内存很重要。占用过多内存的应用可能会被系统直接终止以恢复内存。

适应性

视图控制器负责其视图的表示,并负责调整该表示以匹配基础环境。每一个iOS应用程序应该能够在iPad和几种不同尺寸的iPhone上运行。与其为每个设备提供不同的视图控制器和视图层次结构,使用单一的视图控制器来适配变化的视图要求显得更为简单。

在iOS中,视图控制器需要处理粗粒度的更改和细粒度的更改。当视图控制器的特征更改时,会发生粗粒度的更改。特性是描述总体环境的属性,例如显示比例。视图控制器的水平和垂直尺寸类别是两个最重要的特征,它们指示了视图控制器在给定维度中的空间。你可以使用size类更改来更改视图布局的方式,如图1-4所示。当水平size类是常规尺寸时,视图控制器将利用额外的水平空间来安排其内容。当水平size类别紧凑时,视图控制器将垂直排列其内容。

The Role of View Controllers 视图控制器介绍(部分翻译)_第4张图片

在给定的尺寸级别内,随时可能发生更细粒度的尺寸更改。当用户将iPhone从纵向旋转到横向时,尺寸类别可能不会更改,但屏幕尺寸通常会更改。使用自动排版格式时,UIKit会自动调整视图的大小和位置以匹配新尺寸。 View Controller可以根据需要进行其他调整。

有关适应性的更多信息,请参见适应性模型。

你可能感兴趣的:(ios开发)