Jer*_*son 36 crash macos cocoa
有人有诊断这些崩溃的经验吗?我有一个用户一致地得到它们,虽然我找到了一个iOS相关帖子,但我的应用程序并没有崩溃在相同类型的操作上......
Sha*_*ybc 21
原因:
在iOS/tvOS中有队列/线程,每个线程都有自己的类型或优先级,也称为"服务质量"或简称"QOS",这意味着cpu应该处理这个线程的紧迫程度,可能性是:
一旦在同一队列中同时运行太多任务,操作系统就会通知您它无法以相同的优先级同时执行所有这些任务(每个队列的堆栈大小都有限制) ,因为它说"OverCommit",这意味着你已经过了提交队列(在你的情况下是"Default-QOS"队列)并且它退出,因为它此时无法接收更多任务并以你想要的方式执行它们.
解:
您应该做的是首先找到导致此崩溃的"dispatch_async"命令,然后使用其他队列中的一个(这意味着期望该任务的预期响应更慢),
通常开发人员不考虑它,只需使用主队列,这是默认的优先级/队列,如下所示:
dispatch_async(dispatch_get_main_queue()) {
// some task to perform
print("This is my task")
}
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题(如果应用程序通知您已经过度使用主队列)将其更改为其他队列之一,如下所示:
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")
})
Run Code Online (Sandbox Code Playgroud)
如果你不需要后台(或并行)执行,你甚至可以完全忽略dispatch_async命令,只需执行如下命令:
// some task to perform
print("This is my task")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19352 次 |
最近记录: |