Ist es sicher, NSTimers in einer seriellen GCD-Warteschlange zu planen und ungültig zu machen?

8

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.

    
Javier Soto 01.02.2013, 19:52
quelle

1 Antwort

9

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.

    
das 02.02.2013, 01:29
quelle