Was ist der Haupt-Thread-Checker in Xcode 9?

8

Ich habe überprüft, was in der Xcode 9-Dokumentation neu ist, Ich finde das

Aber ich habe nicht verstanden, wie ich das mit dem neuen Xcode 9 nutzen kann

    
suthar 06.07.2017, 08:47
quelle

3 Antworten

18

Es kann in der Diagnoseoption des Schemas aktiviert / deaktiviert werden. Außerdem ist die Option "Bei Problemen anhalten" eine bequeme Option, um diese Probleme zu beheben.

    
Saúl Moreno Abril 28.09.2017 15:42
quelle
14

Von der Apple-Dokumentation :

  

Der Haupt-Thread-Checker ist ein eigenständiges Tool für Swift- und C-Sprachen   entdeckt ungültige Verwendung von AppKit, UIKit und anderen APIs auf a   Hintergrundfaden. Aktualisieren der Benutzeroberfläche für einen anderen Thread als den Hauptthread   ist ein häufiger Fehler, der zu verpassten visuellen UI-Updates führen kann   Defekte, Datenbeschädigungen und Abstürze.

Also zum Beispiel versuchen, die Eigenschaft text eines UILabel auf einem Hintergrund zu ändern Thread wird nicht funktionieren. Apple sagt, dass dies zu verpassten UI-Updates, visuellen Fehlern, Datenbeschädigungen und Abstürzen führen kann . In der Praxis führt dies in 99% der Fälle zu zufälligen verpassten UI-Updates und visuellen Fehlern (und nicht zu Abstürzen).

Crashes wären eigentlich gut, weil wir solche unsachgemäße Verwendung von UIKit leicht erkennen könnten, aber zufällige visuelle Defekte sind während der Entwicklung viel schwieriger zu erkennen. Und hier kommt der Main Thread Checker ins Spiel.

Der Haupt-Thread-Checker hilft , die Verwendung von UIKit in einem Hintergrundthread zu erkennen, löst sie nicht . Sobald Sie eine Verwendung von UIKit in einem Hintergrund-Thread entdeckt haben, können Sie ihn mit DispatchQueue lösen.

Nochmals von Apple-Dokumentation :

Die Dokumentation von URLSession sagt, dass die Beendigung der Schließung in einem Hintergrundthread aufgerufen wird. Das ist also schlecht. Der Main Thread Checker wird Ihnen helfen, die Verwendung von UIKit in einem Hintergrundthread zu erkennen.

%Vor%

Lösung: Verwenden Sie DispatchQueue.main , um UI-Updates für den Hauptthread durchzuführen.

%Vor%

Die Lösung selbst hat nichts mit Xcode zu tun, es ist ein Merkmal der Sprache. So war es natürlich in früheren Versionen von Xcode möglich, aber vor Xcode 9 hatten Sie nicht den Haupt-Thread-Checker, um das Problem zu erkennen.

Wie @hamish darauf hinweist, können Sie auch das WWDC-Video für eine ausführlichere Erklärung ansehen .

    
deadbeef 06.07.2017 09:23
quelle
0

Unter dem Runtime API Abschnitt prüfen, stellen Sie sicher, dass der Haupt Thread Checker aktiviert ist, um zu sehen, ob Sie ui Methoden ausgeführt wird in einem nicht-UI-Thread

    
Sh_Khan 09.01.2018 11:10
quelle

Tags und Links