Objective-C utiliza un sofisticado sistema de paso de mensajes cuando un objeto llama a un método en otro objeto. Quiero saber si es posible, dentro del método llamado, determinar cuál fue el objeto llamante.¿Es posible usar las características de tiempo de ejecución de Objective-C para determinar de dónde se llamó un método?
Por ejemplo:
@implementation callingClass
- (void)performTest
{
calledObject = [[[calledClass alloc] init] autorelease];
id result = [calledObject calledMethod];
assert(result == this);
}
@end
@implementation calledClass
- (id)calledMethod
{
id objectThatCalledThisMethod = ... // <-- what goes here?
return objectThatCalledThisMethod;
}
@end
¿Qué podría escribir en la línea comentada con el fin de hacer el pase afirmación cuando ejecuto performTest
?
NSInvocation también no tiene nada acerca de la persona que llama - solo objetivo, el selector, y los argumentos. –
Es por eso que sugerí derivar una nueva clase o ajustarla, al menos esto podría darle una forma consistente de pasar el remitente a la función de llamada o posiblemente construir una estructura de datos desde donde se pueda extraer la información en el extremo de los receptores. Depende de lo que intenta lograr –