在我的应用程序中,我需要处理来自网络的大量数据,并将其解析为优化的本地格式,然后将它们保存到数据库中,或者如果任何用户界面正在等待该数据,将它们发送到用户界面。我知道在主线程中进行重度解析工作很愚蠢,因为它会阻塞主线程并使用户界面交互非常卡顿。所以这是我尝试过的确保用户界面线程空闲的方法:
问题看起来像这样: 当我在表格上进行平滑滚动时,突然间表格会冻结约0.1秒,然后就像平常一样平滑流畅。 在冻结期间,我可以在Instruments中看到CPU爆发。但在单独的线程视图中,我可以看到主线程OK,几乎没有CPU消耗。
那么为什么UI表格仍然会冻结呢? 后台线程为什么仍然会以如此低的线程优先级占用如此多的CPU周期?
你们是如何确保UI始终响应的? 是否有任何有用的工具来突出显示导致UI冻结的地方?
- Global optimization to remove really slow code despite what thread it is in.
Lower all thread priorities, ie,
NSOperation.threadPriority=0.1; NSThread.threadPriority=0.1; dispatch_async(dispatch_get_global_queue(PRIORITY_LOW));
问题看起来像这样: 当我在表格上进行平滑滚动时,突然间表格会冻结约0.1秒,然后就像平常一样平滑流畅。 在冻结期间,我可以在Instruments中看到CPU爆发。但在单独的线程视图中,我可以看到主线程OK,几乎没有CPU消耗。
那么为什么UI表格仍然会冻结呢? 后台线程为什么仍然会以如此低的线程优先级占用如此多的CPU周期?
你们是如何确保UI始终响应的? 是否有任何有用的工具来突出显示导致UI冻结的地方?