2011-03-20 31 views
1

嗨,我想要優化我的iphone應用程序的啓動時間(即使應用程序打開後儘快顯示第一個視圖),我想要優化我的iphone應用程序的啓動時間。我想要優化的部分是應用程序委託中的核心數據堆棧(託管對象上下文,持久存儲協調器等)的初始化。我想到了兩種方法來解決這個問題,並想知道你對這些解決方案(或其他你可能有的)有什麼想法(利弊)?初始化後臺線程中的核心數據堆棧是一個很好的設計選擇?

注:在後臺

初始化核心數據堆棧:核心數據堆棧在應用程序委託在Where to place the "Core Data Stack" in a Cocoa/Cocoa Touch application

解決方案1(我的首選之一)給出的理由初始化線程從應用程序委託。這將允許應用程序初始化更快,窗口/視圖更快顯示。

解決方案2:

懶惰實例化核心數據堆棧時的視圖控制器要求接入到核心數據堆棧。然而,我喜歡這個想法,核心數據棧應該在應用程序委託中初始化,然後在需要它的每個視圖控制器中傳遞。

注意:此解決方案打破了在應用程序委託中初始化核心數據堆棧的慣例。

問候,

回答

2

如果你看一下標準的核心數據利用模板,您將看到堆棧未初始化直到一些視圖控制器要求的應用程序委託的managedObjectContext。因此,核心數據堆棧不會初始化,直到需要managedObjectContext加載並開始配置自身的視圖之後。

堆棧的實際初始化非常輕巧且快速。在開始主動生成對象圖並讀寫持久性存儲之前,核心數據並沒有太多的工作。簡單地初始化堆棧需要非常少的時間。

有時候,我有類似的擔憂,做了一些測試。我發現,初始階段真正的滯後是第一個視圖的加載,而不管它是否使用了核心數據。我無法測量啓用核心數據並禁用它之間啓動時間的任何差異。

所以,我不會打擾一個非標準的初始化,除非你自己的自定義測試顯示它會導致一些性能拖動。

+0

我的看法很簡單(即2個按鈕)。所以根據你的回答,當視圖需要核心數據棧時,我會懶惰地實例化它。感謝TechZen。 – 2011-03-21 16:38:40