在我的iPhone应用程序中,我有一个用于在后台执行任务的辅助线程,每隔几毫秒,视图必须更新(而不是从主线程)。我在UIView子类中尝试了以下代码:
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
这在模拟器上效果很好,但是,在我的设备上,它非常迟钝。我唯一能想到的是主线程被UIKit的常规例程所困扰,这意味着我的setNeedsDisplay在它应该被调用时(大约1/2秒之后)被调用。我认为这是因为在其他代码中,基于用户交互,我立即调用setNeedsDisplay,它工作正常,没有任何延迟。辅助线程上的后端计算少于用户界面线程上的后端计算。这会在我的应用程序中导致一些非常糟糕的视觉效果。
所以,总结一下,我该如何解决这个问题呢?
更新:
我是否有另一种方式告诉一个视图需要每秒刷新x次?如果可能的话,这可能最终会让我的表现更好。我尝试过CADisplayLink但没有成功......
答案 0 :(得分:3)
如果您的用户界面受到如此严重的打击,以至于您的呼叫延迟了那么多,请尝试稍微批量处理UI更新和/或围绕批量的TableView更新执行beginUpdate / endUpdate(例如。)
我在MonoTouch中做了类似的事情,我没有看到这么大的滞后。我的所有更新都来自后台主题,与您的应用程序的方式相同。
或者,如果您的主UI可以使用更多的CPU时间,请尝试降低后台线程优先级,看看是否有帮助。