Buscar..


NSInvocation Objective-C

Refiérase a este Post original por e.James

Según la referencia de la clase NSInvocation de Apple :

Una NSInvocation es un mensaje Objective-C que se vuelve estático, es decir, es una acción que se convierte en un objeto.

Y, con un poco más de detalle:

El concepto de mensajes es central para la filosofía del objetivo c. Cada vez que llama a un método, o accede a una variable de algún objeto, le está enviando un mensaje. NSInvocation es útil cuando desea enviar un mensaje a un objeto en un momento diferente en el tiempo, o enviar el mismo mensaje varias veces. NSInvocation permite describir el mensaje que va a enviar y luego invocarlo (en realidad, enviarlo al objeto de destino) más adelante.


Por ejemplo, supongamos que desea agregar una cadena a una matriz. Normalmente enviarías el mensaje addObject: siguiente manera:

[myArray addObject:myString];

Ahora, supongamos que desea utilizar NSInvocation para enviar este mensaje en algún otro momento:

En primer lugar, debería preparar un NSInvocation objeto para su uso con NSMutableArray 's addObject: Selector:

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

A continuación, debe especificar a qué objeto enviar el mensaje:

[myInvocation setTarget:myArray];

Especifique el mensaje que desea enviar a ese objeto:

[myInvocation setSelector:@selector(addObject:)];

Y complete cualquier argumento para ese método:

[myInvocation setArgument:&myString atIndex:2];

Tenga en cuenta que los argumentos del objeto deben ser pasados ​​por el puntero. Gracias a Ryan McCuaig por señalarlo, y consulte la documentación de Apple para obtener más detalles.

En este punto, myInvocation es un objeto completo, que describe un mensaje que se puede enviar. Para enviar el mensaje, deberías llamar:

[myInvocation invoke];

Este último paso hará que se envíe el mensaje, básicamente ejecutando [myArray addObject:myString]; .

Piense en ello como enviar un correo electrónico. Abre un nuevo correo electrónico (objeto NSInvocation ), NSInvocation la dirección de la persona (objeto) a quien desea enviarlo, escribe un mensaje para el destinatario (especifique un selector y argumentos) y luego haga clic en "enviar" (llamar a invoke ).

Consulte Uso de NSInvocation para obtener más información.


NSUndoManager utiliza los objetos NSInvocation para que pueda revertir los comandos. Esencialmente, lo que estás haciendo es crear un objeto NSInvocation para decir: "Oye, si quieres deshacer lo que acabo de hacer, envía este mensaje a ese objeto, con estos argumentos". Le da el objeto NSInvocation al NSUndoManager , y agrega ese objeto a una matriz de acciones que se pueden deshacer. Si el usuario llama "Deshacer", NSUndoManager simplemente busca la acción más reciente en la matriz e invoca el objeto NSInvocation almacenado para realizar la acción necesaria.

Consulte Registro de operaciones de deshacer para obtener más detalles.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow