iOS
NSInvocación
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.