iOS
NSInvocation
Szukaj…
NSInvocation Objective-C
Zobacz ten oryginalny post autorstwa e.James
Zgodnie z referencją klasy NSInvocation firmy Apple :
NSInvocation
jest komunikatem Objective-C renderowanym statycznie, to znaczy jest akcją zamienioną w obiekt.
I, nieco bardziej szczegółowo:
Pojęcie wiadomości jest kluczowe dla filozofii celu-c. Za każdym razem, gdy wywołujesz metodę lub uzyskujesz dostęp do zmiennej jakiegoś obiektu, wysyłasz jej wiadomość. NSInvocation
przydaje się, gdy chcesz wysłać wiadomość do obiektu w innym momencie lub wysłać tę samą wiadomość kilka razy. NSInvocation
pozwala opisać wiadomość, którą zamierzasz wysłać, a następnie wywołać ją (faktycznie wysłać do obiektu docelowego) później.
Załóżmy na przykład, że chcesz dodać ciąg do tablicy. Zwykle wysyłasz wiadomość addObject:
w następujący sposób:
[myArray addObject:myString];
Powiedzmy, że chcesz użyć NSInvocation
do wysłania tej wiadomości w innym momencie:
Najpierw przygotujesz obiekt NSInvocation
do użycia z addObject:
selector NSMutableArray
:
NSMethodSignature * mySignature = [NSMutableArray
instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
invocationWithMethodSignature:mySignature];
Następnie określ, do którego obiektu wysłać wiadomość:
[myInvocation setTarget:myArray];
Podaj wiadomość, którą chcesz wysłać do tego obiektu:
[myInvocation setSelector:@selector(addObject:)];
I wprowadź wszelkie argumenty dla tej metody:
[myInvocation setArgument:&myString atIndex:2];
Zauważ, że argumenty obiektowe muszą być przekazywane przez wskaźnik. Dziękujemy Ryanowi McCuaigowi za zwrócenie na to uwagi i więcej informacji można znaleźć w dokumentacji Apple .
W tym momencie myInvocation
jest kompletnym obiektem opisującym wiadomość, którą można wysłać. Aby wysłać wiadomość, zadzwoń:
[myInvocation invoke];
Ten ostatni krok spowoduje wysłanie wiadomości, zasadniczo wykonując [myArray addObject:myString];
.
Pomyśl o tym jak o wysłaniu e-maila. Otwierasz nowy e-mail (obiekt NSInvocation
), NSInvocation
adres osoby (obiektu), do którego chcesz go wysłać, wpisz wiadomość dla odbiorcy (określ selector
i argumenty), a następnie kliknij „wyślij” (wywołanie invoke
).
Aby uzyskać więcej informacji, zobacz Używanie NSInvocation .
NSUndoManager
używa obiektów NSInvocation
aby mógł odwracać polecenia. Zasadniczo NSInvocation
obiekt NSInvocation
który mówi: „Hej, jeśli chcesz cofnąć to, co właśnie zrobiłem, wyślij wiadomość do tego obiektu z tymi argumentami”. NSInvocation
obiekt NSInvocation
do NSUndoManager
i dodaje on ten obiekt do tablicy działań, których nie można cofnąć. Jeśli użytkownik NSUndoManager
„Cofnij”, NSUndoManager
po prostu wyszukuje najnowszą akcję w tablicy i wywołuje przechowywany obiekt NSInvocation
celu wykonania niezbędnej akcji.
Aby uzyskać więcej informacji, zobacz Rejestrowanie operacji cofania .