iOS
NSInvocation
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 .