Znalazłem dziwne słowo kluczowe w NSObject.h
- (oneway void)release;
Przeszukałem sieć i dowiedziałem się, że wiąże się to z asynchronicznym przekazywaniem wiadomości, które wygląda podobnie z przekazywaniem wiadomości Erlanga.
Wydaje się, że może to zrobić wiele interesujących rzeczy. Jakie są dobre przypadki użycia tego słowa kluczowego?
objective-c
syntax
keyword
use-case
eonil
źródło
źródło
oneway void
to jedna z tych pięknych, przypadkowych metafor, które czasami widzimy podczas kodowania, w tym przypadku śmierci. „Jeśli coś jest po drugiej stronie, nie mów nam”.Odpowiedzi:
oneway
jest używany z interfejsem API obiektów rozproszonych, który umożliwia użycie obiektów Objective-C między różnymi wątkami lub aplikacjami. Mówi systemowi, że nie powinien blokować wątku wywołującego, dopóki metoda nie zwróci. Bez niej obiekt wywołujący będzie blokował, mimo że zwracany typ metody jest void. Oczywiście nigdy nie jest używany z niczym innym niż void, ponieważ oznaczałoby to, że metoda zwraca coś, ale wywołujący tego nie otrzymuje.Aby uzyskać więcej informacji na temat obiektów rozproszonych, zobacz Cocoa Conceptual DistrObjects .
źródło
Zgodnie z dokumentacją Apple'a metoda jednokierunkowa jest używana tylko dla obiektów rozproszonych (a nie dla wielowątkowości).
Modyfikator jednokierunkowy jest używany tylko wtedy, gdy obiekt jest zdalny. W takim przypadku wywołanie release może powrócić asynchronicznie (przed zakończeniem metody). W sieci ma to sens, ponieważ oczekiwanie na wiadomość zwrotną może chwilę potrwać.
Metoda release nie ma wartości zwracanej, więc wywołanie jej może być wykonywane asynchronicznie. Natomiast retain i autorelease zwracają identyfikator, więc musimy czekać na przesłanie komunikatu zwrotnego w całej sieci.
źródło
oneway
słowa kluczowego powoduje, że komunikat nie blokuje wątku wywołującego podczas wykonywania wywoływanej metody, powoduje to, że wywoływana metoda jest wykonywana w drugim wątku. Czy to nie jest wielozadaniowość (w najprostszej formie)? Czy mogę tego użyć, aby szybko odłączyć niektóre małe operacje (bez większego wysiłku) do innego wątku? Dziękuję Ci bardzo.- (oneway void) release
wtedy stanie? Nie ma go na innym komputerze lub procesie.one way
metody oznaczadon't wait for the method to complete and return anything. block it if there is any n/w trafic or so.
Czy mam sens?