iOS
NSInvocation
Recherche…
NSInvocation Objective-C
Reportez-vous à ce message original par e.James
Selon la référence de classe NSInvocation d' Apple :
Un
NSInvocation
est un message Objective-C rendu statique, c'est-à-dire une action transformée en objet.
Et, un peu plus en détail:
Le concept de message est au cœur de la philosophie objectif-c. Chaque fois que vous appelez une méthode ou accédez à une variable d'un objet, vous lui envoyez un message. NSInvocation
est pratique lorsque vous souhaitez envoyer un message à un objet à un autre moment ou envoyer le même message plusieurs fois. NSInvocation
vous permet de décrire le message que vous allez envoyer, puis de l' invoquer (l'envoyer effectivement à l'objet cible) ultérieurement.
Par exemple, supposons que vous souhaitiez ajouter une chaîne à un tableau. Vous devriez normalement envoyer le message addObject:
comme suit:
[myArray addObject:myString];
Maintenant, supposons que vous souhaitiez utiliser NSInvocation
pour envoyer ce message à un autre moment:
Tout d'abord, vous devez préparer un objet NSInvocation
à utiliser avec addObject:
selector de NSMutableArray
:
NSMethodSignature * mySignature = [NSMutableArray
instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
invocationWithMethodSignature:mySignature];
Ensuite, vous spécifiez quel objet envoyer le message à:
[myInvocation setTarget:myArray];
Spécifiez le message que vous souhaitez envoyer à cet objet:
[myInvocation setSelector:@selector(addObject:)];
Et remplissez tous les arguments pour cette méthode:
[myInvocation setArgument:&myString atIndex:2];
Notez que les arguments d'objet doivent être passés par un pointeur. Merci à Ryan McCuaig de l' avoir signalé, et veuillez consulter la documentation d' Apple pour plus de détails.
À ce stade, myInvocation
est un objet complet, décrivant un message pouvant être envoyé. Pour envoyer le message, vous devez appeler:
[myInvocation invoke];
Cette dernière étape entraînera l'envoi du message, en exécutant essentiellement [myArray addObject:myString];
.
Pensez-y comme envoyer un email. Vous ouvrez un nouvel email (objet NSInvocation
), NSInvocation
l'adresse de la personne (objet) à qui vous voulez l'envoyer, tapez un message pour le destinataire (spécifiez un selector
et des arguments), puis cliquez sur "envoyer" (appel invoke
).
Voir Utilisation de NSInvocation pour plus d'informations.
NSUndoManager
utilise des objets NSInvocation
pour pouvoir inverser les commandes. Essentiellement, vous créez un objet NSInvocation
pour dire: "Hé, si vous voulez annuler ce que je viens de faire, envoyez ce message à cet objet, avec ces arguments". Vous donnez l'objet NSInvocation
au NSUndoManager
et il ajoute cet objet à un tableau d'actions annulables. Si l'utilisateur appelle "Annuler", NSUndoManager
recherche simplement l'action la plus récente du tableau et appelle l'objet NSInvocation
stocké pour effectuer l'action nécessaire.
Voir Enregistrement des opérations d'annulation pour plus de détails.