UIViewController loadView方法

问题描述:

重写UIViewController中的loadView方法时,应该在方法的开头还是方法结尾调用[super loadView]?为什么?UIViewController loadView方法

只是要确定,你不是指viewDidLoad,对吧?因为它们是两种非常不同的方法...从3.0开始,文档建议始终调用viewDidLoad。

你可以在之前或之后调用它,但通常它被放置在最后,除非你有其他理由。

+2

不知道为什么这是被接受的答案。虽然确实是正确的,但它并不回答问题。 – rob5408 2012-07-27 04:54:33

+2

因为对问问题的人来说,帮助比驯化更重要。 – 2012-07-27 05:44:43

+2

我很欣赏这种帮助,Stack Overflow没有它。我只是不确定你为什么不把它作为评论。你要求澄清,然后回答一个不同的问题。这两者都不适合成为答案的候选人。 – rob5408 2012-07-30 12:09:47

通常情况下,您不应该直接调用loadView。它只是设置你的self.view属性,并仅由视图控制器调用。
只有当您需要由您的超类创建的视图时,才应该调用[super loadView],因为您希望将其包含在装饰视图层次结构中或类似的东西中。

+0

重写'loadView'时,不应该调用'[super loadView]'?我只是试了一下,结果是视图不加载,这是我所期望的。 – Nestor 2011-05-23 02:55:37

+2

@Nestor:文档中明确指出“你永远不应该调用这个方法”。但是,您应该正确实施它,即您必须在loadView中设置self.view。 – nschmidt 2011-05-26 12:29:57

+0

就像'dealloc'。你不应该自己调用它,但是当你实现它时,你应该总是在最后调用'[super dealloc]'。我通常调用'[super loadView]'并让基类句柄创建视图,然后自己添加子视图。 – 2011-06-16 19:28:55

按照UIViewController class reference,你不应该叫[super loadView]都:

你的这种方法的自定义实现不应该调用超。

+2

这是正确的。但是,文档很清楚地表明,您使用此方法创建视图层次结构,将self.view设置为基本UIView。在这种情况下 - 不要调用[super loadView]。但是,如果你想添加子视图,那么你可以调用[super loadView];然后像[self.view addSubview:mySubview];没有任何问题。 – 2012-11-28 15:43:52

+1

这是一个重要的说明,谢谢丹尼尔。虽然,我总是在-viewDidLoad中添加我的子视图。 – erikprice 2012-12-04 21:04:06