我的应用程序会触发一个线程,专门用来检查进程的状态。它每5-10秒触发一次:
if(!monitorTask){
MYLog(100,@"Monitor task is dead");
return;
}
dispatch_async(monitorTask,^{ // fuckup here
MYLog(150,@"...Checking iTunes");然而,它似乎也经常挂在那里:

有任何关于如何修复/捕获这个问题的线索吗?这个应用程序正在海滩球上,但在Xcode中“运行”很好地遵循了这条指令:

发布于 2015-09-05 05:54:37
是否确定monitorTask的类型为dispatch_queue_t?See these Apple guides for an example of how to create a serial queue
虽然我在你的评论中看到你创建队列是正确的。
也有可能在您可以将队列分派给它之前,队列已经被释放。您可能需要对队列执行perform some memory management操作,以确保在调度之前不会释放队列。
最后,需要注意的是,串行队列通常用于保护共享资源。如果您只是尝试对资源执行定期检查(一个永远不会写入且只读取的任务),那么您最好使用并发队列(您可能只应使用其中一个4 given global queues,
或者,因为您似乎要在应用程序的整个生命周期中始终进行检查,所以您甚至可以考虑使用Dispatch Source,更具体地说,是一个Timer Dispatch Source
发布于 2015-09-05 05:57:06
我认为这可能是Xcode调试器的问题,因为我不能在Xcode之外运行应用程序时复制它:-/
https://stackoverflow.com/questions/32248857
复制相似问题