Ich habe in NSObject.h ein seltsames Schlüsselwort gefunden
- (oneway void)release;
Ich habe das Web durchsucht und festgestellt, dass es sich um eine asynchrone Nachrichtenübermittlung handelt, die mit Erlangs Nachrichtenübermittlung ähnlich aussieht.
Es scheint, dass dies viele interessante Dinge machen kann. Was sind einige gute Anwendungsfälle für dieses Schlüsselwort?
objective-c
syntax
keyword
use-case
eonil
quelle
quelle
oneway void
ist eine dieser schönen zufälligen Metaphern, die wir manchmal in der Codierung sehen, in diesem Fall für den Tod. "Wenn es irgendetwas auf der anderen Seite gibt, sag es uns nicht."Antworten:
oneway
wird mit der API für verteilte Objekte verwendet, die die Verwendung von Objective-C-Objekten zwischen verschiedenen Threads oder Anwendungen ermöglicht. Es teilt dem System mit, dass es den aufrufenden Thread nicht blockieren soll, bis die Methode zurückkehrt. Ohne diese Option wird der Aufrufer blockiert, obwohl der Rückgabetyp der Methode ungültig ist. Offensichtlich wird es nie mit etwas anderem als void verwendet, da dies bedeuten würde, dass die Methode etwas zurückgibt, aber der Aufrufer es nicht versteht.Weitere Informationen zu verteilten Objekten finden Sie unter Cocoa Conceptual DistrObjects .
quelle
Laut Apples Dokumentation wird oneway nur für verteilte Objekte verwendet (und nicht für Multithreading).
Der Oneway-Modifikator wird nur verwendet, wenn das Objekt entfernt ist. In diesem Fall kann der Release-Aufruf asynchron zurückgegeben werden (bevor die Methode beendet wurde). In einem Netzwerk ist dies sinnvoll, da das Warten auf eine Rückmeldung eine Weile dauern kann.
Die Freigabemethode hat keinen Rückgabewert und kann daher asynchron ausgeführt werden. Im Gegensatz dazu geben Beibehalten und Autorelease eine ID zurück. Daher müssen wir warten, bis die Rückmeldung im gesamten Netzwerk übertragen wird.
quelle
oneway
Schlüsselworts dazu führt, dass die Nachricht den aufrufenden Thread nicht blockiert, während die aufgerufene Methode ausgeführt wird, wird die aufgerufene Methode in einem zweiten Thread ausgeführt. Ist das nicht Multitasking (in seiner einfachsten Form)? Kann ich damit einige kleine Vorgänge schnell (ohne großen Aufwand) von einem anderen Thread trennen? Vielen Dank.- (oneway void) release
dann? Es ist nicht auf einer anderen Maschine oder einem anderen Prozess.one way
einer Methode bedeutetdon't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
Sinn mache ich?