初始化视图控制器

初始化视图控制器

问题描述:

当视图控制器第一次实例化时,它通常会创建或加载它在其生命周期中所需的对象。它不应该创建 视图或与显示内容相关联的对象。它应该将 重点放在实现其他关键行为所需的数据对象和对象上。初始化视图控制器

以上是从iOS参考:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10

的文档接着描述与故事板的视图载荷序列。

我的问题是:

由于视图控制器将与笔尖文件,其中包含的视图对象相关联;其“viewDidLoad”方法似乎设计用于在加载时配置视图对象。那么我们应该如何文档的建议:

“不应该创建显示内容相关的意见或物品”

作何解释?

问题1与我们是否使用Storyboard有关吗?

不知道我明白你的问题的权利,但这里是我的解释:

  1. init ialization和视图创建两个单独的步骤。假设我有一个视图控制器,其表格的编号为IBOutlet,它应该显示存储在核心数据中的配方列表。在我的初始化方法中,我会从CoreData获取数据并将其存储在数组或获取的结果控制器中。我不需要餐桌,因此我不会为self.view房产做任何事情(如果没有视图,则会调用viewDidLoad)。在viewDidLoad我呼吁[tableView reloadData]重绘单元格,以便它们显示控制器初始化程序中创建的我的控制器中的数据。

  2. 我不认为它是相关的,但故事板应该是你的视图控制器替换单个文件的单独笔尖的支架。

+0

感谢您的回答,@Eimantas。正如你所暗示的那样,这些文档可能意味着视图对象是在视图控制器加载之前在nib文件中创建的...... – Stanley 2012-04-08 11:29:20

+0

@Stanley当视图控制器用nib实例化时,nib文件被解压到内存中。在那里,每个视图都会调用'initWithCoder:'和'awakeFromNib'。然后,在所有插座和操作连接后,您将获得viewDidLoad调用。 – Eimantas 2012-04-08 11:31:00

+0

感谢您的协助和详细的回复...... :) – Stanley 2012-04-08 11:36:51

您引用的声明与移动设备限制和设计效率有很大关系。它并没有特别涉及到故事板。

通过“实例化”,文档意味着-(id)init;调用。发生这种情况时,控制器“准备关键数据,但不创建视图”。这意味着控制器评估一个xib文件,并在初始化时构建视图的内部分层表示。这一步只涉及RAM和CPU。

视图控制器仅在将视图推入导航控制器时才创建视图,或查看过渡动画(即viewDidLoad开始时)。这是因为意见很昂贵。它涉及GPU和视频RAM。视频RAM比RAM更受限制,不需要显示时创建视图(VRAM中的后台缓冲区)效率不高。

如果你看看你的项目,你应该发现一些视图控制器正在初始化,但不是立即需要显示。如果没有这种设计,VRAM将无缘无故地耗尽。

+0

视图控制器不会查看其笔尖或在init中对其进行评估。它在loadView中做到了。将视图添加到可见窗口时发生数据到GPU的传输,这发生在viewDidLoad返回之后。 – 2012-04-08 14:50:49

+0

@robmayoff,感谢您的意见。所以一个视图控制器在''init''中做的事情并不多。 – 2012-04-08 14:52:29

+0

谢谢,Shiming和rob,在你的回答和评论中详细分析... – Stanley 2012-04-09 00:50:58