2014-06-10 25 views
0

我是iOS編程新手。我想知道何時會創建所有視圖和視圖控制器。什麼時候視圖和視圖控制器在iOS中初始化/實例化?

在,它和它的控制器將被創建時,應用程序啓動的所有視圖及其控制器創建

當視圖變爲有效(在屏幕上顯示)的時間(也時,它變得無效,它將被釋放)?

謝謝!

回答

1

答案不是真的,但它取決於你的應用程序的結構。視圖不會在您引用它們之前創建,或者視圖即將顯示在屏幕上。雖然控制器可以在不同的時間實例化,但可能在創建視圖之前就已經完成了。例如,當使用標籤欄控制器時,所有控件都在標籤欄控制器本身後面實例化,但僅創建並顯示索引0處標籤的視圖。其他視圖只有在您點擊其他選項卡之後纔會加載。使用segues時,控制器在調用segue時創建,視圖在此後不久加載(但在調用類中調用prepareForSegue之後,這就是爲什麼您不能在該方法中引用任何目標控制器的視圖)。

當不再有任何強指針時,視圖控制器及其視圖將被釋放。再次,這發生取決於你的應用程序設置。例如,使用導航控制器時,當您推送到另一個控制器時,最初的一個不再顯示在屏幕上,但導航控制器對此有強烈的參考,因此不會解除分配。但是,當你彈出視圖控制器(關閉導航控制器的堆棧)時,它將被釋放,除非你自己保留一個指針。

+0

謝謝你的解釋。很有幫助! – DragonZ

0

我相信main()會在您的應用第一次啓動時初始化應用代理。應用程序委託會將管理顯示內容的窗口對象初始化爲屏幕。應用程序委託的應用程序:didFinishLaunchingWithOptions是我們應用程序邏輯的入口點。這裏是你可以初始化和設置你的根視圖控制器的地方,儘管它已經被照顧好了,特別是如果你正在使用故事板。

在初始化根視圖控制器之後,它會經歷一系列設置視圖的步驟。

viewDidLoad() 
viewWillAppear() 
viewDidAppear() 
viewWillLayoutSubviews 

是您在設置時可以響應的一些事件。我假設在viewDidAppear和viewWillLayoutSubviews之間的某個地方是爲該視圖控制器的子視圖調用類似事件的時候。

viewWillDisappear() 
viewDidDisappear() 
viewDidUnLoad() 

是其他感興趣的事件。

0

如果您使用的是StoryBoard,則其中定義的根視圖控制器就是在應用程序啓動後加載的視圖,例如您可以使用導航控制器自行控制應用程序的流程。

爲了控制視圖,控制器和應用程序的生命週期,操作系統會將消息發送到代表事件的類。這些可以是應用程序啓動的事件,出現在屏幕上的視圖或實例化的類。

這裏有幾個例子:

  • 當你的應用程序首次啓動時,操作系統會調用應用程序委託application:didFinishLaunchingWithOptions:
  • 當viewControlles的View即將出現在屏幕上時,操作系統將在viewController上調用viewWillAppear()
  • 當您從storyBoard創建視圖時,方法initWithCoder:會在視圖的類上被調用。

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

+0

任何其他方式,我可以用它來設計我的故事板以外的用戶界面?謝謝! – DragonZ

相關問題