查找阻塞主线程的代码的最佳方法是啥?

Posted

技术标签:

【中文标题】查找阻塞主线程的代码的最佳方法是啥?【英文标题】:What is the best way to find code that is blocking your main thread?查找阻塞主线程的代码的最佳方法是什么? 【发布时间】:2012-06-16 20:07:02 【问题描述】:

我有一个UIScrollView,当您滚动时,我在其中放置了一堆视图。它正在从 api 端点下载图像。问题是滚动感觉不如应有的流畅。我知道这是因为大多数情况下阻塞了主线程。我已经搜索了整个代码并注释掉了任何 UI 更新代码,但是快速滚动仍然很慢。

关于查找代码的哪一部分阻塞主线程的最佳方法是什么?

【问题讨论】:

【参考方案1】:

仪器。没有什么比这更可怕的了。甚至苹果的documentation 也提到了寻找高 CPU 相关的任务。

不过,我个人推荐使用 Time Profiler。其中here有很好的教程。

【讨论】:

你真的能找到使用工具阻塞主线程的东西吗? 是的,请提供更多详细信息:哪个特定的 Instruments 模板可以帮助我找到哪个操作阻塞了我的主线程?链接的 Apple 文档中未提及或不明显。 这完全取决于您的代码。在某些情况下,仪器可以发现线程死锁,但线程阻塞通常是更适合手动检查堆栈跟踪的调试任务。此外,导致线程死锁的方法多种多样,即使是 Apple 也很难找到一个包罗万象的解决方案。

以上是关于查找阻塞主线程的代码的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何追踪阻塞主(UI)线程的调用?

主线程是不是在阻塞线程上运行?

本机调用阻塞主线程

java界面子线程界面阻塞了主线程界面怎么解决?

子线程怎么不阻塞主线程

JSON解析-没有URL会话任务恢复的替代方法是啥,因为它不是主线程的一部分?