在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_BACKGROUNDlet backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass,0)dispatch_async(backgroundQueue,{ // some task to perform print("This is my task")})
如果你不需要背景(或并行)执行,你甚至可以忽略dispatch_async命令,只是执行你的命令像这样:
// some task to performprint("This is my task")总结
以上是内存溢出为你收集整理的osx – 一致性分派队列:com.apple.root.default-qos.overcommit crash全部内容,希望文章能够帮你解决osx – 一致性分派队列:com.apple.root.default-qos.overcommit crash所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)