【问题标题】:What are the side effects of calling [super loadView]调用[super loadView]有什么副作用
【发布时间】:2013-02-13 04:54:48
【问题描述】:

loadView 的文档中,Apple 声明:

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

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

当我拨打[super loadView] 时,实际发生了什么(如果有的话)坏事?

【问题讨论】:

    标签: ios cocoa-touch uiview uiviewcontroller loadview


    【解决方案1】:

    调用[super loadView] 将导致loadViewUIViewController 实现运行。除此之外,如果提供了nibName,这是从NIB 加载视图的方法。因此,如果您最后调用 super,它可能会覆盖您在自己的子类中所做的所有视图设置。如果你先调用 super,这不会有问题……除非你在 -awakeFromNib 中有任何代码或其他东西。

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

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

    【讨论】:

    • 如果您想在 UIViewController 中添加的默认视图中添加额外的子视图,那么最好先调用[super loadView],以确保超级视图存在,并然后添加您自己的子视图(假设未使用 IB)
    • 你可以这样做。 UIViewController 的默认视图只是一个普通的旧 UIView,所以它不会给你带来很多好处,但它是可能的。您也可以在-viewDidLoad 中添加这些内容
    • 是的 - 以前我会在 viewDidLoad 中添加它们,但我现在开始更喜欢在加载视图中这样做,因此视图构建得更快
    【解决方案2】:

    如果你允许我做这个比较的话,就像“不要骑红灯过马路”。

    有一个交通信号灯规定了过马路的规则,因为无论出于何种原因,它可能都是危险的。您可能会在红灯下过马路而没有任何反应,这是完全合理的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多