iOS应用程序意外中断。多线程问题(可能)

时间:2015-12-10 09:22:58

标签: ios objective-c multithreading objective-c-blocks grand-central-dispatch

我有一个应用程序,我从输入流中读取数据并将其可视化为用户。当我设置输入流时,我在后台运行循环中设置它,打开它然后运行后台循环。但有时我的应用程序意外中断。我无法重复这次崩溃,所以我甚至不知道从哪里开始修复它。

我得到的崩溃看起来像这样: enter image description here

崩溃的方法如下: enter image description here

它说是Enqueued from background queue (Thread 3)Thread 3看起来像这样: enter image description here

这可能是什么原因?我应该从哪里开始修复它?

奇怪的是,在Thread 17中,崩溃变量bg_queue的地方是nil,无论如何它都会传递if条件,我做

  

if(bg_queue!= nil)

但在线程3中,它不是零:

主题17 enter image description here

主题3 enter image description here

2 个答案:

答案 0 :(得分:2)

看来,您是从GCD管理的辅助线程创建一个运行循环。您不应该从GCD管理的线程获取运行循环!

创建自己的专用线程或使用主线程获取运行循环。

答案 1 :(得分:1)

如果你创建了第二个runloop,那么你比我更勇敢。我永远不敢这样做,因为我会确定它会导致我难以解决的问题。正如你发现的那样。

如果您确定自己是一个比我更聪明的开发人员,那么抱歉,您自己就是这样。如果你不确定,那就不要这样做!远离二次循环!