首次实例化视图控制器时,通常会创建或 在其生命周期内加载它所需的对象。它不应该创造 与显示内容相关的视图或对象。它应该集中精力 关于实现其他关键所需的数据对象和对象 的行为。
以上内容来自iOS参考:
文档继续描述使用Storyboard的视图加载序列。
我的问题是:
1
由于视图控制器将与包含视图对象的nib文件相关联;它的“viewDidLoad”方法似乎是为加载时配置视图对象而设计的。那么文档的建议应该如何:
“不应创建与显示内容相关联的视图或对象”
被解释?
2
问题1是否与我们是否使用故事板有关?
答案 0 :(得分:1)
我不确定我的问题是否正确,但这是我的解释:
init
ialization和视图创建是两个单独的步骤。假设我有一个带有IBOutlet
表的视图控制器,它应该显示存储在核心数据中的配方列表。在我的初始化方法中,我将从CoreData获取数据并将其存储在数组或获取结果控制器中。我不需要表格,因此我对self.view
属性(如果还没有视图则调用viewDidLoad
)不执行任何操作。在viewDidLoad
中,我调用[tableView reloadData]
重绘单元格,以便显示控制器初始化程序中创建的控制器中的数据。
我不认为它是相关的,但故事板应该只是你的视图控制器用单个文件替换单独的笔尖的脚手架。
答案 1 :(得分:1)
您引用的声明与移动设备限制和设计效率有很大关系。它与Storyboard无关。
通过“实例化”,文档意味着-(id)init;
调用。发生这种情况时,控制器“准备关键数据,但不创建视图”。这意味着控制器评估xib文件,并在init时构造视图的内部分层表示。此步骤仅涉及RAM和CPU。
视图控制器仅在将视图推入导航控制器时创建视图,或者查看过渡动画(当viewDidLoad
启动时)。这是因为视图很昂贵。它涉及GPU和视频RAM。视频RAM比RAM更受限制,只需在不需要显示时创建视图(VRAM中的后台缓冲区)效率不高。
如果您查看项目,您应该发现一些视图控制器正在初始化但不是立即需要显示。如果没有这样的设计,VRAM将无缘无故地快速消耗。