我是iOS编程新手。我想知道什么时候会创建所有视图和视图控制器。
当应用程序启动所有视图并创建其控制器时
或
当视图变为活动状态(显示在屏幕上)时,将创建它及其控制器(同样,当它变为非活动状态时,它将被解除分配)?
谢谢!
答案 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:
。viewWillAppear()
。initWithCoder:
会在视图的类上调用。以下是一些可以更好地解释它的文档:UIApplicationDelegate Protocol和View Controller Programming Guide: Resource Management。