ios - 如何查找为什么 iOS 应用程序的主线程在 "semaphore_timedwait_trap"上被阻止?

标签 ios objective-c multithreading

所以,我还没有弄清楚这一点,因为当我暂停执行时...... Xcode 并没有真正显示发生了什么:

Xcode hang/freeze analysis

当我滚动很长的 UITableView 时会发生这种卡住。不断地在其可滚动区域的中心周围,因此它不断地重复使用单元格。我认为可能在那里发生的调度 block 可能没有保留一些东西,但我还不确定,因为使用标准调试器及其相当复杂的 View 没有显示任何数据。 (引用:https://stackoverflow.com/a/23501382/963901)

我将在这里尝试一些手动诊断,但是也许还有其他方法可以使用 Instruments 或其他方法来解决这个问题?

最佳答案

为了调查这类问题,我建议如下:

  • 禁用 Xcode 的调试导航 Pane 中的设置,该设置对您隐藏中间堆栈帧。它是 Pane 右下角显示堆栈跟踪的按钮之一。
  • 查看回溯跟踪中新显示的部分,了解信号量上阻塞了哪些代码。
  • 查看程序中的其他线程,看看哪些线程正在执行与步骤 2 中发现的代码相关的工作。
  • 关于ios - 如何查找为什么 iOS 应用程序的主线程在 "semaphore_timedwait_trap"上被阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516957/

    相关文章:

    ios - 如何控制 UIActivityIndi​​catorView 的旋转?

    objective-c - 一个类别可以在 Objective C 中实现一个协议(protocol)吗?

    java - 使用错误管理在 Java 中运行多线程

    .net - 同一进程的两个线程可以产生相同的 GUID 吗?

    java - 代码性能比较,线程与非线程

    ios - UISearchController 的自定义动画?

    ios - swift 2.3 到 swift 3.0

    ios - 解析/PFQueryTableView : Append extra text to an object in parse

    ios - 将 SDWebImage 集成到 TVOs 项目

    iphone - 如何使用 iOS 可达性