对于由导航控制器推送的控制器,如果在其所需的init
方法中,您创建了推送控制器视图的详细信息,我的理解是,如果视图稍后被删除,因为它在屏幕外(到期)例如,对于低内存,你可能永远不会再看到它,因为init
仅在加载视图控制器时被调用一次,并且后续推送可能不会显示任何内容。
这个视图设置似乎是viewDidLoad
或viewWillAppear
的更好的地方,这样如果控制器需要在下次推送时构建视图,它将被正确地重新创建。
然而,我看到教程经常将推送视图控制器的视图设置放在其init
方法中;这有多重要?
答案 0 :(得分:3)
视图设置应该在viewDidLoad
中完成(如果您没有使用笔尖,则应在loadView
中),原因正如您所描述的那样。如果您需要知道控制器的顶级视图维度以设置子视图,请在viewWillAppear:
中执行此操作。
通常,弹出的视图控制器会立即被释放;如果应用程序需要稍后显示相同的视图,它会为它创建一个新的视图控制器。所以在那种情况下,应用程序不会显示“没有”。
如果应用程序在第一个视图控制器顶部推送或显示另一个视图控制器,则可以卸载第一个视图控制器的视图。如果应用程序从不在第一个视图控制器上推送或呈现第二个视图控制器,则在弹出控制器之前无法卸载第一个视图控制器的视图,此时(在大多数应用程序中)控制器无论如何都要解除分配。因此,在这种情况下,在init
中设置视图不会造成麻烦。
但在init
中设置视图仍然是糟糕的设计。您可能稍后更改应用程序以推送或显示第二个视图控制器,从而产生意外的不安全行为。
此外,创建视图控制器,在其上设置属性,然后推送它是很常见的。如果属性影响控制器的视图层次结构,则init
设置视图为时尚早。