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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow