把你的控制器定義爲懶控制器怎麼樣?
我的意思是,如果應用程序由於初始化九個視圖控制器而需要一些時間啓動,那麼這與控制器在初始化時實際執行的操作有關。所以,你可以通過兩個步驟使控制器懶惰地初始化:一是,當你將所有的控制器添加到標籤欄控制器時;二,當你選擇一個特定的選項卡時,相應的控制器被初始化。
我認爲這是最乾淨的方法。
否則,我敢打賭直接使用UITabBar
來管理它在你自己的標籤欄控制器類。
作爲最後一個選項,我會嘗試根據某些邏輯在適當的時間通過調用setViewControllers:animated:
來動態更改標籤欄控制器的內容。例如,你可以在application:didFinishLaunchingWithOptions:
只有5視圖控制器初始化標籤欄控制器,然後在稍後的時刻添加休息...
但我的實際建議是使組件控制器偷懶......
編輯:閱讀在評論你的問題......
,如果你想給一個嘗試到您的控制器的延遲初始化後,我的意思是以下幾點:
您將初始化控制器(或UIKi通過調用[[... alloc] init ...]來加載nib時)這並沒有改變;
init
方法會將控制器初始化爲其默認狀態,如設置屬性和伊娃值,並且不做任何更復雜的操作;
在控制器視圖顯示之前,您通過調用特定方法完成其初始化;這將貫穿「相當多的授權」部分,我認爲這是初始化的冗長部分。
很抱歉,如果談到「懶惰初始化」引起了組件的邏輯初始化和init
方法的內容之間的歧義。
至於第3點,您有幾個關於在哪裏完成初始化的選項。
可能性是控制器即將顯示的時間。在這種情況下,您可以在標籤欄控制器代理中定義-tabBarController:didSelectViewController:
,或者使用viewWillAppear
。這會給你所有的最懶的初始化,但是當你在視圖出現之前選擇標籤的時候,它可能會增加一些延遲。
更好的是使用viewDidLoad
,這會給你一種不那麼懶惰的初始化;初始化全部您的控制器會在您不控制的某個時間點發生(當然,在顯示視圖之前),所以它可能會延遲一些事情,但這不會發生在applicationDidFinishLoading
之內,並且會更多UI友好,因爲它將由主循環控制。絕對是第一個嘗試的選擇。另請參閱UIViewController reference中viewDidLoad
的說明。
最後是關於單獨線程的說明。請記住,從單獨的線程使用UIKit
並非都是安全的,所以要小心。
它不應該花這麼長的時間來分配init視圖控制器。你可能需要優化它們,並確保這些ViewController加載他們的資源懶惰...提示:viewDidAppear –