2

当一个视图控制器第一次被实例化时,它通常会创建或加载它在其生命周期内需要的对象。它不应创建与显示内容相关的视图或对象。它应该专注于实现其他关键行为所需的数据对象和对象。

以上来自iOS参考:

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

该文档继续描述了使用 Storyboard 的视图加载序列。

我的问题是:

1

由于视图控制器将与包含视图对象的 nib 文件相关联;而且它的“viewDidLoad”方法似乎是为在加载时配置视图对象而设计的。那么文档的建议应该如何:

“不应创建与显示内容相关的视图或对象”

被解释?

2

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

4

2 回答 2

1

您引用的声明与移动设备限制和设计效率有很大关系。它与情节提要特别无关。

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

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

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

于 2012-04-08T11:27:41.647 回答
1

不确定我的问题是否正确,但这是我的解释:

  1. init化和视图创建是两个独立的步骤。假设我有一个带有表格的视图控制器,IBOutlet它应该显示存储在核心数据中的配方列表。在我的初始化方法中,我会从 CoreData 获取数据并将其存储在数组或获取的结果控制器中。我不需要表格,因此我对属性不做任何事情(如果还没有视图,则self.view调用它)。viewDidLoadviewDidLoad我调用[tableView reloadData]重绘单元格时,它们会显示来自控制器初始化程序中创建的控制器的数据。

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

于 2012-04-08T11:20:41.717 回答