2011-03-30 148 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