osx – 一致性分派队列:com.apple.root.default-qos.overcommit crash

osx – 一致性分派队列:com.apple.root.default-qos.overcommit crash,第1张

概述任何人有诊断这些崩溃的经验?我有一个单一的用户得到它们一致,虽然我发现一个iOS相关的帖子,我的应用程序不是崩溃在同一类型的 *** 作… 原因: 在IOS / TVOS中有队列/线程,每个线程都有自己的类型或优先级也称为“服务质量”或短的“QOS”,这意味着cpu应该处理此线程的紧急程度,是: > QOS_CLASS_DEFAULT > QOS_CLASS_USER_INITIATED > QOS_CL 任何人有诊断这些崩溃的经验?我有一个单一的用户得到它们一致,虽然我发现一个iOS相关的帖子,我的应用程序不是崩溃在同一类型的 *** 作…解决方法 原因:

在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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存