调用[super loadView]有什么副作用

时间:2013-02-27 11:39:09

标签: ios cocoa-touch uiview uiviewcontroller loadview

loadView的文档中,Apple声明:

  

此方法的自定义实现不应调用super。

所以我尝试在[super loadView]方法中调用loadView。似乎没有什么不好的事情发生,没有任何警告。我正在使用以loadView编程创建的视图,而不是来自NIB。

当我致电[super loadView]时,实际发生了什么(如果有的话)?

2 个答案:

答案 0 :(得分:5)

调用[super loadView]将导致UIViewController loadView的实施运行。除此之外,如果已提供nibName,这是从NIB加载视图的方法。因此,如果您要调用super last,它可能会覆盖您在自己的子类中执行的所有视图设置。如果你先打电话给超级,这不会有问题...除非你在-awakeFromNib或其他什么代码中有任何代码。

基本上,您不应该调用super,因为如果您以编程方式加载视图,则超类中完成的任何工作都不是您想要保留的工作。充其量,你丢掉了一堆工作。在最坏的情况下,UIViewController可能会在那里建立一些状态,对视图的来源做出假设。

你不需要它,所以不要这样做。

答案 1 :(得分:1)

如果你允许我进行这种比较,就像“不要穿过红色街道。”

有一个红绿灯建立了一条规则而不是过马路,因为可能无论出于什么原因都是危险的。你可以穿过红色街道并没有任何反应,这是完全合情合理的。

API通过声明调用super来设置is规则。就像上面的例子一样,结果是不确定的,取决于其他事情。没有任何反应是完全合情合理的。