2009-05-06 86 views
0

在我的NiB中,我有幾個View控制器。當應用程序啓動時,所有對應的ViewDidLoad()調用都會被調用。優化presentModalViewController的加載時間:

在ViewControllerA中,我有ViewA,它包含一個帶有100張圖片的UiScrollView。在ViewdidLoad中初始化這些圖片。因此,在應用程序發佈時,所有圖片都已初始化。

在我的主功能表視圖控制器,我有一個按鈕,按下時調用presentModalViewController:ViewControllerA

即呼叫正在20秒。

我認爲在ViewDidload中的預加載會優化這一點。但是,一旦電話回覆並被召回(第二次啓動此VC,它非常快速且即時)。

那麼是什麼原因造成的呢?爲什麼第一次調用presentModalViewController需要這麼長時間。在內部,它試圖安排所有的圖像?任何優化這個方法?如果沒有,什麼最好的方式來顯示UiActivityIndi​​cator

預先感謝您

回答

0

首先,把你的-viewDidLoad方法的一些的NSLog()語句。當你認爲他們的時候他們可能沒有被召喚。 UIViewControllers是懶惰的。他們實際上並沒有加載他們的NIB,直到有人引用他們的-view。

如果通過「調用所有對應的ViewDidLoad()調用,」你的意思是你實際上正在手動調用[viewController viewDidLoad],那將不起作用,不這樣做。這是一個只能由系統調用的委託方法。

你可以但不應該通過調用[viewController view]來解決所有這些問題。這將迫使一個負載,但這幾乎總是錯誤的答案。

圖片有多大?你真的有可用的內存來保存所有100個時間嗎?你可以在你需要的時候加載這些圖片嗎?圖片展示了什麼樣的形狀?一個UITableView可以爲你做很多工作嗎?如果他們在網格中,則可以爲每個UITableViewCell顯示4-5張圖片,然後您將獲得所有UITableView的優化。

+0

我有一個XIB所有VC和我與viewDidLoad中越來越在應用程序啓動所謂的NSLog消息:(檢查 我的應用是在景觀和我想要的滾動horzontial上面有圖片滾動型。 什麼建議你會給這種實現 – user82383 2009-05-07 06:10:51

1

原來這太長了評論。

我會先玩弄UITableView,看它是否可以應用。

如果它是完全全屏的,那麼你有UITableView縱向,但旋轉你的單元格中的圖片。這將與景觀相同。

如果scrollview沒有填充屏幕,您仍然可以嘗試帶視圖變換的UITableView來旋轉它。

然後,你的下一個方法應該是放置在滾動視圖中懶惰地加載圖像的佔位符。如果所有圖像的大小相同,那麼這是非常簡單的,您可以通過僅保留有限數量的這些單元來優化內存。

另一個瘋狂的想法:使它成爲一個UIWebView。這將爲你做所有的懶惰負載。

+0

感謝羅布您的迴應,我真的很感激它我試圖優化我的方式我加載我的圖像在我的滾動視圖(加載一個接一個)。而不是我的initalization LoadView 。我有他們在ViewDidLoad:Animated。但是,我不能讓他們逐一顯示(所以用戶看到的進步),他們只是都出現,你可以提出你的佔位符的方法嗎?我想實現這個 – user82383 2009-05-07 18:19:17

+0

你需要一個新的UIImageVi新的子類。它應該在提取真實圖像時提供正確大小的佔位符圖像。如果您從磁盤中獲取數據,那麼您需要將實際圖像提取放在後臺線程上。如果您從網絡中獲取數據,則可以使用NSURLConnection將其加載到主線程上而不會阻塞。當UIImage完成加載時,您將調用setImage:來替換真實佔位符。您可能必須在此時調用setNeedsDisplay:以使其重繪。 – 2009-05-08 15:01:18