【问题标题】:(iphone) pushViewController in background thread?(iphone)pushViewController 在后台线程中?
【发布时间】:2011-03-30 10:08:47
【问题描述】:

IPhone SDK - Leaking Memory with performSelectorInBackground

似乎建议您实际上可以在后台线程中 pushViewController。

但是我收到了来自 stackoverflow 人员的警告,我不应该这样做。
例如。 (iphone) start timer from background thread?

pushViewController 是否被视为“UI 更新”?
(因为我知道 UI 更新应该只在主线程中完成)

如果是这样,
当一个 viewController 需要一段时间来加载,并且想要在加载时显示一个指示器。
我的选择是什么?

【问题讨论】:

    标签: iphone objective-c multithreading pushviewcontroller


    【解决方案1】:

    这里有几个策略。

    1) 在你进行推送之前,但在你知道你将要这样做的时候,在当前视图上调出一个合适的活动视图。我在某些应用程序中执行此操作,您单击表格中的一行,但推送视图必须执行一些需要时间的网络通信,因此我将表格单元格以蓝色突出显示,并在披露指示器左侧添加一个白色微调器.效果很好。

    2) 使用延迟加载将新的视图控制器快速显示在屏幕上,但将繁重的代码推迟到加载后,以便新控制器可以处理它自己的活动视图。通过延迟加载,我的意思是您应该尽可能少地在 init 方法中执行操作,并小心使用 viewdidload / viewwillappear / viewdidappear 等来分散工作并尽快在屏幕上显示活动视图。

    【讨论】:

    • 感谢回复,如果我采取第一种方法,我什么时候删除指标? viewDidDisappear 也许?我想在后台推送视图控制器以便轻松删除指示器。您是如何删除指示器的?
    • 所以你还建议后台线程中的 pushviewcontroller 是完全错误的?
    • 在我的情况下,我不需要删除指示器,因为我在 viewWillAppear 上重新加载了表格。但是,是的,viewDidDisappear 将是一个合适的地方。推入后台线程对我来说听起来像是一个禁忌,你必须在主线程上做 UI。
    • 我采用了第一种方法,问题是,即使我在调用 pushViewController 之前添加了指标视图,但指标直到为时已晚(在下一个视图出现之前)才显示。我想这是因为有太多的 UI 更新正在进行。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    相关资源
    最近更新 更多