Was ist der richtige Weg? Die Dokumentation NSTimer
sagt Folgendes:
Spezielle Überlegungen
Sie müssen diese Nachricht vom Thread an senden wo der Timer installiert wurde. Wenn Sie diese Nachricht von einem anderen senden Thread, die mit dem Timer verknüpfte Eingabequelle wird möglicherweise nicht entfernt aus seiner Laufschleife, die verhindern könnte, dass der Thread austritt richtig.
Da GCD
Ihnen nicht garantiert, dass eine serielle Warteschlange immer Blöcke für denselben Thread ausführt, was ist der richtige Weg, um sicherzustellen, dass Sie NSTimer
für denselben Thread planen und ungültig machen?
BEARBEITEN:
Nach dem Hinweis auf die Antwort unten habe ich MSWeakTimer
( Ссылка ) erstellt eine benutzerdefinierte Timer-Implementierung mit GCD
, die aus jeder Warteschlange verwendet werden kann.
Sie sollten kein NSTimer
in einem von GCD verwalteten anonymen Worker-Thread installieren.
Verwenden Sie Sende-Timer-Quellen mit GCD anstelle von NSTimer
, c.f. dispatch_source_create (3).
NSTimer
basiert auf der Runloop des aktuellen Threads, was für eine GCD-Warteschlange nicht sinnvoll ist. Weitere Informationen zu GCD- und Runloop-APIs finden Sie in der WWDC2012-GCD-Sitzung.
Tags und Links objective-c ios grand-central-dispatch core-foundation nstimer