0

对于由导航控制器推送的控制器,如果在其所需的init方法中创建推送控制器视图的详细信息,我的理解是,如果视图稍后因为它不在屏幕上而被删除(例如,由于内存不足),你可能再也看不到它了,因为init在加载视图控制器时只调用了一次,随后的推送可能什么也不显示。

这个视图设置似乎更好的地方是viewDidLoador viewWillAppear,这样如果控制器需要在下次推送视图时构建视图,它将被正确地重新创建。

然而,我看到的教程经常将推送视图控制器的视图设置放在其init方法中;这有多重要?

4

1 回答 1

3

出于您所描述的原因,应该在viewDidLoad(或者loadView如果您不使用笔尖)完成视图设置。如果您需要知道控制器的顶级视图尺寸来设置子视图,请在viewWillAppear:.

通常,弹出的视图控制器会立即被释放;如果应用程序需要稍后显示相同的视图,它会为其创建一个新的视图控制器。所以在那种情况下,应用程序不会显示“无”。

如果应用程序在第一个视图控制器之上推送或呈现另一个视图控制器,则可以卸载第一个视图控制器的视图。如果应用程序从未在第一个视图控制器上推送或呈现第二个视图控制器,则在弹出控制器之前无法卸载第一个视图控制器的视图,此时(在大多数应用程序中)无论如何都会释放控制器。所以在这种情况下,设置视图init不会造成麻烦。

但是在init. 您稍后可能会更改您的应用程序以推送或呈现第二个视图控制器,从而产生意外的不安全行为。

此外,创建视图控制器,在其上设置属性,然后推送它是很常见的。如果属性影响控制器的视图层次结构,那么init设置视图还为时过早。

于 2012-05-25T04:56:20.653 回答