在iOS中初始化/实例化视图和视图控制器的时间是什么时候?

时间:2014-06-10 21:02:39

标签: ios objective-c

我是iOS编程新手。我想知道什么时候会创建所有视图和视图控制器。

当应用程序启动所有视图并创建其控制器时

当视图变为活动状态(显示在屏幕上)时,将创建它及其控制器(同样,当它变为非活动状态时,它将被解除分配)?

谢谢!

3 个答案:

答案 0 :(得分:1)

答案既不是真的,但取决于你的应用程序的结构。在您引用视图或视图即将放在屏幕上之前,不会创建视图。控制器虽然可以在不同的时间实例化,但可以在创建视图之前完成。例如,当使用标签栏控制器时,所有控制器都在标签栏控制器本身之后立即实例化,但仅创建并显示索引0处的选项卡视图。在单击其中一个选项卡之前,不会加载其他视图。使用segue时,会在调用segue时创建控制器,并且此后不久会加载视图(但是在调用类中调用prepareForSegue之后,这就是为什么您无法引用目标控制器的任何视图在那种方法)。

当不再有任何强指针时,将取消分配视图控制器及其视图。同样,当发生这种情况取决于您的应用程序的设置方式。例如,使用导航控制器,当您推送到另一个控制器时,初始控制器不再在屏幕上,但导航控制器具有强引用,因此不会取消分配。但是,当您弹出一个视图控制器(离开导航控制器的堆栈)时,它将被释放,除非您自己保留指针。

答案 1 :(得分:0)

我相信main()会在你的应用首次启动时初始化app delegate。应用程序委托初始化管理向屏幕显示内容的窗口对象。 app delegate的应用程序:didFinishLaunchingWithOptions是我们应用程序逻辑的入口点。您可以在这里初始化和设置根视图控制器,尽管它会为您处理,特别是如果您正在使用故事板。

初始化根视图控制器后,它将通过一系列步骤设置其视图。

viewDidLoad()
viewWillAppear()
viewDidAppear()
viewWillLayoutSubviews

是您可以在设置时响应的一些事件。我假设viewDidAppear和viewWillLayoutSubviews之间的某个位置是为该视图控制器的子视图调用类似的事件。

viewWillDisappear()
viewDidDisappear()
viewDidUnLoad()

是其他感兴趣的事件。

答案 2 :(得分:0)

如果您正在使用StoryBoards,其中定义的根视图控制器是将在应用程序启动时加载的视图,您可以使用导航控制器自行控制应用程序的流程。

为了控制视图,控制器和应用程序的生命周期,操作系统会向表示事件的类发送消息。这些可以是应用程序启动的事件,显示在屏幕上的视图或正在实例化的类。

以下是一些例子:

  • 当您的应用首次启动时,操作系统会在您的应用代表中调用application:didFinishLaunchingWithOptions:
  • 当viewControlles的View即将出现在屏幕上时,操作系统将在viewController上调用viewWillAppear()
  • 当您从storyBoard创建视图时,方法initWithCoder:会在视图的类上调用。

以下是一些可以更好地解释它的文档:UIApplicationDelegate ProtocolView Controller Programming Guide: Resource Management