iOS
NSInvocation
Ricerca…
NSInvocation Objective-C
Fai riferimento a questo post originale di e.James
Secondo il riferimento alla classe NSInvocation di Apple :
Un
NSInvocation
è un messaggio Objective-C reso statico, ovvero un'azione trasformata in oggetto.
E, in un piccolo dettaglio:
Il concetto di messaggi è centrale nella filosofia dell'obiettivo-c. Ogni volta che chiami un metodo o accedi a una variabile di qualche oggetto, stai inviando un messaggio. NSInvocation
è utile quando si desidera inviare un messaggio a un oggetto in un momento diverso o inviare lo stesso messaggio più volte. NSInvocation
consente di descrivere il messaggio che si sta per inviare e quindi di invocarlo (in realtà lo si invia all'oggetto di destinazione) in un secondo momento.
Ad esempio, supponiamo di voler aggiungere una stringa a un array. Normalmente si invierà il messaggio addObject:
come segue:
[myArray addObject:myString];
NSInvocation
ora che tu voglia utilizzare NSInvocation
per inviare questo messaggio in un altro momento:
Innanzitutto, si prepara un oggetto NSInvocation
da utilizzare con il selettore addObject:
NSMutableArray
:
NSMethodSignature * mySignature = [NSMutableArray
instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
invocationWithMethodSignature:mySignature];
Successivamente, devi specificare a quale oggetto inviare il messaggio:
[myInvocation setTarget:myArray];
Specifica il messaggio che desideri inviare a quell'oggetto:
[myInvocation setSelector:@selector(addObject:)];
E compila qualsiasi argomento per quel metodo:
[myInvocation setArgument:&myString atIndex:2];
Si noti che gli argomenti dell'oggetto devono essere passati dal puntatore. Grazie a Ryan McCuaig per averlo indicato e per favore vedi la documentazione di Apple per maggiori dettagli.
A questo punto, myInvocation
è un oggetto completo, che descrive un messaggio che può essere inviato. Per inviare effettivamente il messaggio, chiameresti:
[myInvocation invoke];
Questo passaggio finale causerà l'invio del messaggio, eseguendo essenzialmente [myArray addObject:myString];
.
Pensa ad esso come mandare una email. Si apre una nuova email (oggetto NSInvocation
), si NSInvocation
l'indirizzo della persona (oggetto) a cui si desidera inviarlo, si digita un messaggio per il destinatario (specificare un selector
e gli argomenti), quindi fare clic su "invia" ( invoke
chiamata).
Vedere Utilizzo di NSInvocation per ulteriori informazioni.
NSUndoManager
utilizza oggetti NSInvocation
modo che possa invertire i comandi. In sostanza, quello che stai facendo è creare un oggetto NSInvocation
per dire: "Ehi, se vuoi annullare ciò che ho appena fatto, invia questo messaggio a quell'oggetto, con questi argomenti". NSInvocation
oggetto NSInvocation
a NSUndoManager
e aggiunge quell'oggetto a una serie di azioni annullabili. Se l'utente chiama "Annulla", NSUndoManager
cerca semplicemente l'azione più recente dell'array e richiama l'oggetto NSInvocation
memorizzato per eseguire l'azione necessaria.
Vedi Registrazione delle operazioni di annullamento per maggiori dettagli.