0

在我的 iPhone 应用程序中,我有一个辅助线程,用于在后台执行任务,每隔几毫秒,必须更新视图(而不是从主线程)。我在 UIView 子类中尝试了以下代码:

 [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];

这在模拟器上效果很好,但是在我的设备上,它非常滞后。我唯一能想到的是主线程被 UIKit 的常规例程所困,这意味着我的 setNeedsDisplay 在它应该调用的时候被调用了很长时间(大约 1/2 秒后)。我认为这是因为在其他代码中,基于用户交互,我立即调用 setNeedsDisplay,它运行良好,完全没有任何延迟。辅助线程上的后端计算少于用户界面线程上的后端计算。这会在我的应用程序中导致一些非常糟糕的视觉效果。

所以,总结一下,我该如何解决这个问题?


更新:

我还有另一种方法可以告诉视图它需要每秒刷新 x 次吗?如果可能的话,这最终可能对我来说是更好的表现。我试过 CADisplayLink 没有成功...

4

1 回答 1

3

如果您的 UI 受到如此严重的打击,以至于您的通话被延迟了这么多,请尝试将 UI 更新批量化和/或围绕 TableView 的批量更新执行 beginUpdate/endUpdate(例如。)

我在 MonoTouch 中做类似的事情,我没有看到任何滞后。我所有的更新都来自后台线程,方式与您的应用程序相同。

或者,如果您的主 UI 可以使用更多 CPU 时间,请尝试降低后台线程优先级,看看是否有帮助。

于 2011-03-22T16:26:58.153 回答