com.apple.root.default-qos.overcommit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了com.apple.root.default-qos.overcommit相关的知识,希望对你有一定的参考价值。

在IOS / TVOS中有队列/线程,每个线程都有自己的类型或优先级,也称为“服务质量”或简称为“QOS”,这意味着cpu应该处理此线程的紧迫程度,可能性是:
QOS_CLASS_DEFAULT
QOS_CLASS_USER_INITIATED
QOS_CLASS_UTILITY
QOS_CLASS_BACKGROUND
QOS_CLASS_UNSPECIFIED
QOS_CLASS_USER_INTERACTIVE
一旦在同一个队列中同时运行太多任务,那么操作系统会通知您,它不能同时在同一优先级中执行所有这些任务(每个队列的堆栈大小都有限制) ,它表示“OverCommit”,这意味着您已经提交了队列(在您的情况下为“Default-QOS”队列),并且它退出,因为此时无法接收到更多任务,并以您想要的方式执行它们。
解:
您应该做的是首先找到导致此崩溃的“dispatch_async”命令,然后使用其他队列之一(这意味着预期响应速度较慢,然后预期该任务),
通常开发者不要考虑它,只需使用这样的默认优先级/队列的主队列:
dispatch_async(dispatch_get_main_queue())
// some task to perform
print("This is my task")


为了解决这个问题(如果应用程序通知你已经超过主队列)是将其更改为其他队列之一,如下所示:
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue,
// some task to perform
print("This is my task")
)

如果不需要执行后台(或并行),甚至可以忽略dispatch_async命令,只需执行如下命令:
// some task to perform
print("This is my task")

原文链接 : https://stackoverflow.com/questions/27948618/consistent-dispatch-queue-com-apple-root-default-qos-overcommit-crash
参考技术A 没看明白你想问啥

以上是关于com.apple.root.default-qos.overcommit的主要内容,如果未能解决你的问题,请参考以下文章