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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow