2011-03-30 143 views
2

IPhone SDK - Leaking Memory with performSelectorInBackground(iphone)pushViewController在後臺線程?

似乎暗示你實際上可以在後臺線程中pushViewController。

但我從stackoverflow人得到一個警告,我不應該這樣做。
例如。 (iphone) start timer from background thread?

是pushViewController被認爲是「UI更新」?
(因爲我知道,UI更新應僅在主線程來完成)

如果是這樣,
時的viewController需要一段時間來加載,並且要顯示加載時的一個指標。
我的選擇是什麼?

回答

3

幾個策略在這裏。

1)在進行推送之前,但在您知道要執行此操作的位置,請在當前視圖上調出合適的活動視圖。我在一些應用程序中這樣做,點擊表中的一行,但推送的視圖必須執行一些需要時間的網絡通信,因此我將表格單元格以藍色突出顯示,並在披露指示符的左側添加一個白色微調框。效果很好。

2)使用延遲加載在屏幕上快速獲取新的視圖控制器,但推遲大量代碼,直到它加載完畢,以便新控制器可以照看它自己的活動視圖。通過延遲加載我的意思是你應該在init方法中儘可能少地做,並小心使用viewdidload/viewwillappear/viewdidappear等來分散工作,並儘快在屏幕上獲得活動視圖。

+0

感謝您的回覆,如果我採取第一種方法,何時刪除指標? viewDidDisappear也許?我想在後臺推視圖控制器,以便輕鬆移除指示器。您是如何移除指示器的? – eugene 2011-03-30 10:19:12

+0

所以你也建議pushviewcontroller在後臺線程是錯誤的? – eugene 2011-03-30 10:20:29

+1

在我的情況下,我不需要刪除指標,因爲我重新加載viewWillAppear上的表。但是,是的,viewDidDisappear將是一個合適的地方。推入後臺線程對我來說聽起來像是不行,你必須在主線程上做UI。 – Roger 2011-03-30 11:37:44