由于移动到iOS 8.3,我遇到这个错误,主线程将被困在这个调用中.其他一些线程也被卡在该通话中.在任何线程中,我的代码都没有导致这个电话,所以我很遗憾为什么会发生这种情况.有时在点击按钮栏项目时有时会重新绘制图表(使用ShinobiCharts)等.
这是Xcode的堆栈跟踪:
任何人都有任何线索,为什么这是发生和如何解决它?这是非常讨厌的,因为当我被困在那里,我必须重新启动应用程序.请注意,这是在模拟器中发生的.我正处于开发这个程序的早期阶段,大部分时间都花在模拟器中.我还没有看到在一个真实的设备上发生的错误,但是,我还没有经常在设备上运行该应用程序.
解决方法
敲木头,但我想我想到了(至少在我的例子).
什么导致解决方案是搜索syscall_thread_switch,这导致我在这里的答案:
https://stackoverflow.com/a/30333203/978509
其中,如果您查看我链接的回溯(https://gist.github.com/Shalmezad/65ff89d20aa7e0a9d094),则每个syscall_thread_switch之前都有OSSpinLockLockSlow,答案笔记看起来像Livelock,但是由于cpu使用率较低,更为明显的是死锁.
通过我的代码,我发现对于每个后台任务,我每次创建一个新的dispatch_queue_t.我自从重新开始使用相同的队列,这似乎已经解决了这个问题.
没有来自敌人的更多信息(主要是一些代码片段,显示了他如何设置后台任务),我无法回答他们的具体问题,但这应该指出人们正确的方向来解决问题.