我的应用程序会触发专门用于检查进程状态的线程。它每隔5-10秒发射一次:
if(!monitorTask){
MYLog(100,@"Monitor task is dead");
return;
}
dispatch_async(monitorTask,^{ // fuckup here
MYLog(150,@"...Checking iTunes");
然而它似乎也常常挂在那里:
任何线索如何解决/捕获这个?这个应用程序是沙滩球,但在Xcode中“运行”就好了 - 坚持这条指令:
答案 0 :(得分:0)
您确定monitorTask的类型为dispatch_queue_t
吗? See these Apple guides for an example of how to create a serial queue
虽然我在评论中看到您正在正确创建队列。
也可以在发送队列之前解除分配队列。您可能需要在队列中perform some memory management以确保在发送之前不会取消分配。
最后重要的是要注意,串行队列大体上用于保护共享资源。如果您只是尝试对资源执行定期检查(一个永远不会写入且只读取的任务),那么您最好使用并发队列(您应该只使用其中一个{{3 }}
或者因为您似乎在应用程序的整个生命周期中一直在检查,您甚至可以考虑使用4 given global queues,,更具体地说是使用Timer Dispatch Source
答案 1 :(得分:0)
我认为这可能是一个Xcode调试器问题,因为我在Xcode之外运行应用程序时无法复制它: - /