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.