In dieser Antwort Wie wird RACSignal heiß? , @erikprice erklärt heißes und kaltes Signal
Ein "heißes Signal" ist ein Signal, das Werte sendet (und vermutlich auch Arbeit) unabhängig davon, ob es Abonnenten hat. Ein "kaltes Signal" ist ein Signal, das seine Arbeit und das Senden von irgendwelchen Werten bis dahin verschiebt hat einen Abonnenten. Und ein kaltes Signal wird seine Arbeit ausführen und senden Werte für jeden Abonnenten.
Ich frage, ob jemand Beispiele für heiße und kalte Signale zeigen kann, damit es klarer wird
Ein Hot-Signal wird als ein Signal betrachtet, das unabhängig davon, ob es Teilnehmer hat, Werte sendet
Ich verwende ein Hot-Signal zur Überwachung der Netzwerkerreichbarkeit. Eine Tastenaktion, die durch RACCommand
realisiert wird, ist ein weiteres Beispiel für ein Hot-Signal.
Ein "kaltes Signal" ist ein Signal, das seine Arbeit und das Senden irgendwelcher Werte verzögert, bis es einen Teilnehmer hat.
Dies wird sehr gut demonstriert, indem AFNetworking reaktiv gemacht wird. Erstellen Sie eine Methode, die ein Signal zurückgibt, das eine Anforderung darstellt. Wenn Sie dieses Signal abonnieren, wird die Netzwerkanforderung ausgeführt. Der Abonnent wird sendNext:
und sendCompleted
, wenn die Anfrage erfolgreich ist, und sendError:
, wenn die Anfrage fehlschlägt.
Ich finde das RAC 3 Changelog auch nützlich
Heiße Signale sind jetzt Signale
In der Terminologie von RAC 2 löst ein "heißes" RACSignal keines aus Nebenwirkungen, wenn eine -Aubscribe ... -Methode aufgerufen wird. In anderen Wörter, heiße Signale sind vollständig vom Produzenten und Push-basiert, und Verbraucher (Abonnenten) können keinen Einfluss auf ihre Lebensdauer haben.
Dieses Muster ist nützlich, um Beobachter über Ereignisse zu informieren, die dies tun auftreten, egal was. Zum Beispiel könnte ein loading boolean umkehren zwischen wahr und falsch, unabhängig davon, ob etwas beobachtet wird.
Konkret ist jedes RACSubject eine Art heißes Signal, denn das Weitergeleitete Ereignisse werden nicht durch die Anzahl der Teilnehmer bestimmt zu dem Thema.
Kalte Signale sind jetzt Signalproducer
In der Terminologie von RAC 2 führt ein "kaltes" RACSignal seine Arbeit aus Zeit für jedes Abonnement. Mit anderen Worten, kalte Signale führen zur Seite Effekte, wenn eine -Aubscribe ... -Methode an sie aufgerufen wird und möglicherweise in der Lage ist laufende Arbeit abbrechen, wenn -dispose auf die zurückgegebene zurückgerufen wird RACDisposable.
Dieses Muster ist allgemein nützlich, weil es unnötige Arbeit minimiert, und ermöglicht es Operatoren wie Takes, Retry, Concat etc. zu manipulieren wann Die Arbeit wird gestartet und abgebrochen. Kalte Signale sind auch ähnlich wie Futures und verspricht Arbeit, und kann für die Strukturierung nützlich sein asynchroner Code (wie Netzwerkanforderungen).
Ich habe Push vs Pull Signal geschrieben, das im Grunde enthüllt wie Push vs Pull Signal implementiert wird, in Swift 2
Tags und Links ios signals reactive-cocoa