Jeder hatte Erfahrung bei der Diagnose dieser Abstürze? Ich habe einen einzigen Benutzer sie konsequent bekommen, und obwohl ich ein iOS Zusammenhang Post, meine App nicht gefunden wird auf die gleiche Art von Operation abstürzt ...Konsequente Dispatch Queue: com.apple.root.default-qos.overcommit Absturz
Antwort
Grund:
in IOS/TVOS gibt es Warteschlangen/Threads, jeder Thread hat seinen eigenen Typ oder seine eigene Priorität, auch bekannt als "Quality of Service" oder kurz "QOS", was die Dringlichkeitsstufe bedeutet, dass die CPU diesen Thread behandeln sollte, die Möglichkeiten sind:
- QOS_CLASS_DEFAULT
- QOS_CLASS_USER_INITIA TED
- QOS_CLASS_UTILITY
- QOS_CLASS_BACKGROUND
- QOS_CLASS_UNSPECIFIED
- QOS_CLASS_USER_INTERACTIVE
, wenn Sie zu viele Aufgaben zur gleichen Zeit in der gleichen Warteschlange laufen, dann das Betriebssystem benachrichtigt Sie, dass es nicht all diese Aufgaben ausführen kann gleichzeitig in der gleichen Priorität (es gibt eine Begrenzung für die Größe des Stapels für jede Warteschlange), da dort "OverCommit" steht, was bedeutet, dass Sie die Warteschlange überlastet haben (in Ihrem Fall die "Default-QOS" Warteschlange) und es wird beendet, da es keine weiteren Aufgaben erhalten kann Zeit und führen Sie sie auf die Art und Weise, die Sie wollen.
Lösung:
was Sie tun sollten zuerst die „dispatch_async“ -Befehl finden, die diesen Absturz verursacht, dann eine der anderen Warteschlangen verwenden (es bedeutet, erwartete langsamere Reaktion dann für diese Aufgabe erwartet),
in der Regel Entwickler nicht darüber nachdenken, es einfach und Hauptwarteschlange benutzen, die die Standardpriorität ist/wie diese Warteschlange:
dispatch_async(dispatch_get_main_queue()) {
// some task to perform
print("This is my task")
}
, um dieses Problem zu beheben (wenn die Anwendung, die Sie darüber informiert, dass Sie haben die Hauptwarteschlange overcommitted) ist es zu einer der anderen Warteschlangen wie folgt zu ändern:
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")
})
, wenn Sie einen Hintergrund benötigen keine (oder parallel) Ausführung, können Sie sogar den dispatch_async Befehl ganz ignorieren und einfach führen Sie Befehle wie folgt aus:
// some task to perform
print("This is my task")
"(wenn die App Sie benachrichtigt, dass Sie die Hauptwarteschlange überlastet haben)" wie Weisst du das? –
Rewrite Shaybc Antwort in Swift 3:
DispatchQueue.global(qos: .background).async {
// some task to perform
print("This is my task")
})
Für swift3 Verwendung
DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
...
}
- 1. Unterschied zwischen Dispatch Queue und NSOperationQueue
- 2. Erstellen einer Serial Dispatch Queue mit hoher Priorität mit GCD
- 3. Absturz der Garbage Collection Work Queue, wenn dylib geladen wird
- 4. Konsequente Grid-Header mit Flexigrid?
- 5. Wie füge ich ein Ereignis an den Anfang der Event Dispatch Thread Queue in Java?
- 6. Queue in Laravel startet nicht
- 7. Konsequente Breite für geom_bar bei fehlenden Daten
- 8. Qt: Phonon Beispielcode Absturz auf Mac
- 9. Django TemplateView warf Dispatch
- 10. Dispatch Touch Event
- 11. dispatch nicht funktioniert
- 12. JDI Event Dispatch nullpointerexception
- 13. Message Queue vs Task Queue Unterschied
- 14. Queue Algorithmen
- 15. jsdom: dispatch/addEventListener scheint nicht
- 16. dispatch nicht in IE11 Arbeits
- 17. UIWebSelectSinglePicker Absturz
- 18. Design: Queue Management Frage (C#)
- 19. gpus_ReturnGuiltyForHardwareRestart Absturz
- 20. Absturz mit dispatch_block
- 21. Xcode 7 Beta 3 Absturz beim Start
- 22. Kotlin-Klassen mit Android-Erweiterungen nicht auf konsequente Builds gebaut
- 23. Unterschied zwischen Queue Manager und Queue in MQ
- 24. Seltsamer Absturz in Netzerweiterung IPC
- 25. Replikation oder Message Queue?
- 26. asp.net smtp Mail Queue
- 27. Priority Queue in swift
- 28. FIFO-basierte Queue-Implementierungen?
- 29. Concurrent Set Queue
- 30. Multiprocessing mit erneuerbaren Queue
Ich habe das gleiche Problem manchmal. Keine Ahnung, was das verursacht. – JackPearse
Ich habe herausgefunden, dass dies passiert, wenn Sie mehrere Male versuchen, eine sync-dispatch_queue auszuführen. (Die sync dispatch_queue wird von mehreren Threads aufgerufen, während sie weiterarbeitet. Während die Warteschlange den Block ausführt, warten alle Threads auf die Beendigung des Blocks.) – JackPearse