Ios 关于不直接调用viewDidLoad的文档?
Ios 关于不直接调用viewDidLoad的文档?,ios,cocoa-touch,uiviewcontroller,viewdidload,Ios,Cocoa Touch,Uiviewcontroller,Viewdidload,[UIViewController viewDidLoad]方法是在加载相关视图后由系统调用的(显然是?)。我有一个共同的信念,那就是不应该直接调用viewDidLoad。然而,我在中找不到这个指南,也找不到苹果的任何其他指南。它存在吗 为了进行比较,loadView显示 永远不要直接调用此方法 †重写方法中的[super viewDidLoad]除外。未明确提及,但如果您调用它,您将以某种方式违反其文档中指定的方法的“约定”: 在控制器的视图加载到内存后调用 我认为没有任何规则禁止它。我的意
[UIViewController viewDidLoad]
方法是在加载相关视图后由系统调用的(显然是?)。我有一个共同的信念,那就是不应该直接调用viewDidLoad
。然而,我在中找不到这个指南,也找不到苹果的任何其他指南。它存在吗
为了进行比较,loadView
显示
永远不要直接调用此方法
†重写方法中的
[super viewDidLoad]
除外。未明确提及,但如果您调用它,您将以某种方式违反其文档中指定的方法的“约定”:
在控制器的视图加载到内存后调用
我认为没有任何规则禁止它。我的意思不是“有一条我们都知道的规则,只是没有写下来。”我的意思是“我认为没有任何规则禁止它。”据我所知,你可以随时调用
viewDidLoad
(包括它的super
)
这并不意味着你应该叫它。但是,您几乎肯定也不应该调用OSCompareAndSwap
。在这两种情况下,如果你有一个很好的理由并且知道你在做什么,打电话是合适的。但这不太可能出现
虽然我想不出有哪一次我必须直接调用viewDidLoad
,但我必须手动调用viewwillbeen
和viewdiddefine
来管理自定义容器视图控制器中的视图生命周期。如果这是您的意思,那么没有什么可以禁止调用视图生命周期方法
也就是说,如果您不是说“视图已转换为此状态”,那么调用视图生命周期方法将是一种不好的做法。而且,由于很难进入加载视图的情况,但不会调用
viewDidLoad
,因此很难想象在许多情况下它会有用。你不应该毫无用处地调用一个方法。因此,就我所知,这是这里唯一的规则。我认为应该理解的是,框架调用的各种“生命周期”方法永远不应该直接调用。这包括所有的视图[Did | Will][A | Disa]出现
方法等。调用它们是为了让您知道发生了特定的事情。任何类中的任何此类方法都不应该由您自己的代码显式调用。显然我同意,但我也希望苹果公司能在某个地方明确说明这一重要细节。我建议他们可能会被迫明确警告您不要自己调用loadView
,因为与did
/will
方法不同,您无法仅从方法名称合理地推断出这一点。使用各种did
/will
方法,意图是明确的,但在loadView
等方法名称中(在draw(:)
中也不明显,它们共享类似的警告)。loadView
只是没有遵循回调方法的标准命名约定,因此文档试图消除歧义。脚注的小附录,[UIViewController viewDidLoad]的文档没有说明重写[super viewDidLoad]时需要调用它。奇怪的是,Xcode提供的模板仍然可以做到这一点:o手动调用视图将出现。。你到底为什么要这么做。。我写了很多容器,从来没有一次需要这样称呼。我记不起全部原因了。那是在iOS的4-5天左右,有些东西没有称之为生命周期方法。我不记得是tab视图控制器还是我们自己构建的tab视图控制器版本需要它。但是,我同意,我已经好几年没做过了。