Suche…


NSInvocation Objective-C

Siehe diesen ursprünglichen Beitrag von e.James

Laut Apples NSInvocation-Klassenreferenz :

Eine NSInvocation ist eine Objective-C-Nachricht, die statisch dargestellt wird, d. NSInvocation Eine Aktion, die in ein Objekt umgewandelt wird.

Und etwas ausführlicher:

Der Begriff der Botschaften ist zentral für die Ziel-Philosophie. Immer wenn Sie eine Methode aufrufen oder auf eine Variable eines Objekts zugreifen, senden Sie ihr eine Nachricht. NSInvocation wenn Sie eine Nachricht zu einem anderen Zeitpunkt an ein Objekt senden oder dieselbe Nachricht mehrmals senden möchten. NSInvocation können Sie die Nachricht beschreiben, die Sie senden NSInvocation , und sie später aufrufen (tatsächlich an das Zielobjekt senden).


Angenommen, Sie möchten einem Array einen String hinzufügen. Sie würden die Nachricht addObject: normalerweise wie folgt senden:

[myArray addObject:myString];

NSInvocation , Sie möchten NSInvocation , um diese Nachricht zu einem anderen Zeitpunkt zu senden:

Zuerst würden Sie ein NSInvocation Objekt für die Verwendung mit dem addObject: Selector von NSMutableArray addObject: :

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

Als Nächstes geben Sie an, an welches Objekt die Nachricht gesendet werden soll:

[myInvocation setTarget:myArray];

Geben Sie die Nachricht an, die Sie an dieses Objekt senden möchten:

[myInvocation setSelector:@selector(addObject:)];

Und geben Sie alle Argumente für diese Methode ein:

[myInvocation setArgument:&myString atIndex:2];

Beachten Sie, dass Objektargumente vom Zeiger übergeben werden müssen. Vielen Dank an Ryan McCuaig für diesen Hinweis. Weitere Informationen finden Sie in der Dokumentation von Apple .

Zu diesem Zeitpunkt ist myInvocation ein vollständiges Objekt, das eine Nachricht beschreibt, die gesendet werden kann. Um die Nachricht tatsächlich zu senden, rufen Sie an:

[myInvocation invoke];

In diesem letzten Schritt wird die Nachricht gesendet, wobei im Wesentlichen [myArray addObject:myString]; .

Stellen Sie sich das als eine E-Mail vor. Sie öffnen eine neue E-Mail ( NSInvocation Objekt), geben die Adresse der Person (Objekt) ein, an die Sie die E-Mail senden möchten, geben eine Nachricht für den Empfänger ein (geben Sie einen selector und Argumente an) und klicken Sie auf "Senden". (Aufruf invoke ).

Weitere Informationen finden Sie unter Verwenden von NSInvocation .


NSUndoManager verwendet NSInvocation Objekte, um Befehle umzukehren . Im Wesentlichen erstellen Sie ein NSInvocation Objekt, um NSInvocation zu sagen: "Hey, wenn Sie rückgängig machen wollen, was ich gerade getan habe, senden Sie diese Nachricht mit diesen Argumenten an dieses Objekt." Sie übergeben das NSInvocation Objekt an den NSUndoManager und fügen dieses Objekt einem Array von rückgängig gemachten Aktionen hinzu. Wenn der Benutzer "Undo" NSUndoManager , sucht NSUndoManager einfach nach der neuesten Aktion im Array und ruft das gespeicherte NSInvocation Objekt auf, um die erforderliche Aktion auszuführen.

Weitere Informationen finden Sie unter Registrieren von Rückgängig-Operationen .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow