Es ist eine bewusste Design-Entscheidung von Apple Seite nicht haben UIKit
Thread-sicher sein. Es thread-sicher zu machen, würde nicht viel in Bezug auf die Leistung kaufen; es würde tatsächlich viele Dinge langsamer machen. Und die Tatsache , dass UIKit
an den Haupt-Thread gebunden ist, macht es sehr einfach gleichzeitige Programme zu schreiben und UIKit
zu verwenden. Alles, was Sie tun müssen, ist sicherzustellen, , dass Anrufe in UIKit
sind immer auf dem Haupt-Thread gemacht. So nach diesem die Tatsache, dass Objekte auf zugegriffen werden muss der Haupt-Thread ist eine Design-Entscheidung von Apple zugunsten der Leistung.
für ausführlichere Informationen, die Sie durch diesen Artikel gehen
https://www.objc.io/issues/2-concurrency/thread-safe-class-design/
In Ihrem Fall, Sie Alarm von einem anderen Thread zeigen, so dass Sie Code unter dem Mainthread so schreiben, können Sie bekommen der Haupt-Thread unter Verwendung von Code
DispatchQueue.main.async {
// Your UI Updation here
}
Reason
In Cocoa Touch ist die UIApplication
d. H. Die Instanz Ihrer Anwendung an den Hauptthread angehängt, da dieser Thread von UIApplicatioMain()
, der Einstiegspunktfunktion von Cocoa Touch, erstellt wird. Sie richtet die Hauptereignisschleife einschließlich der Ausführungsschleife der Anwendung ein und beginnt mit der Verarbeitung von Ereignissen. Die Hauptereignisschleife der Anwendung empfängt alle UI-Ereignisse, z. B. Berührung, Gesten usw.
UI-Code muss immer in der Hauptwarteschlange erfolgen. – rmaddy
und das Netzwerk wird (normalerweise) außerhalb des Hauptthreads erstellt. Versand sagt, dass der Code innerhalb muss zurück zum Haupt-Thread gehen – GIJOW
https://www.quora.com/Why-Must-the-UI-always-be-updated-on-Main-Thread – JAL