视图和视图控制器在iOS中何时初始化/实例化?

视图和视图控制器在iOS中何时初始化/实例化?,ios,objective-c,Ios,Objective C,我不熟悉iOS编程。我想知道什么时候会创建所有视图和视图控制器 在应用程序启动时,将创建所有视图及其控制器 或 当视图处于活动状态(显示在屏幕上)时,将创建视图及其控制器(同时,当视图处于非活动状态时,将取消分配) 谢谢 我相信main()中发生了一些事情,在应用程序首次启动时初始化了应用程序委托。应用程序委托初始化窗口对象,该对象管理向屏幕显示内容。应用程序代理的应用程序:didFinishLaunchingWithOptions是进入应用程序逻辑的入口点。这里是您可以初始化和设置根视图控制器

我不熟悉iOS编程。我想知道什么时候会创建所有视图和视图控制器

在应用程序启动时,将创建所有视图及其控制器

当视图处于活动状态(显示在屏幕上)时,将创建视图及其控制器(同时,当视图处于非活动状态时,将取消分配)


谢谢

我相信main()中发生了一些事情,在应用程序首次启动时初始化了应用程序委托。应用程序委托初始化窗口对象,该对象管理向屏幕显示内容。应用程序代理的应用程序:didFinishLaunchingWithOptions是进入应用程序逻辑的入口点。这里是您可以初始化和设置根视图控制器的地方,尽管它已经为您处理好了,特别是在您使用故事板的情况下

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

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

viewWillDisappear()
viewDidDisappear()
viewDidUnLoad()

是其他感兴趣的事件。

如果您使用的是故事板,其中定义的根视图控制器是将在应用程序启动时加载的视图。之后,您可以自己使用导航控制器控制应用程序的流程

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

以下是几个例子:

  • 当您的应用程序首次启动时,操作系统将在您的应用程序代理中调用
    应用程序:didFinishLaunchingWithOptions:
  • 当viewControlles的视图即将出现在屏幕上时,操作系统将在viewController上调用
    viewwillDisplay()
  • 从情节提要创建视图时,将在视图的类上调用方法
    initWithCoder:

这里有一些文档可以更好地解释它:而且。

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


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

感谢您的解释。非常有帮助!除了故事板,我还可以用其他方法来设计我的UI吗?谢谢