Objective-C utilizza un sofisticato sistema di passaggio di messaggi quando un oggetto chiama un metodo su un altro oggetto. Voglio sapere se è possibile, all'interno del metodo chiamato, determinare quale fosse l'oggetto chiamante?È possibile utilizzare le funzioni di runtime Objective-C per determinare da dove è stato chiamato un metodo?
Ad esempio:
@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
Quello che ho potuto scrivere nella linea commentata in modo da rendere il passaggio asserzione quando eseguo performTest
?
NSInvocation, inoltre, non ha nulla sul chiamante - solo obiettivo, selettore, e gli argomenti. –
Ecco perché ho suggerito di derivare una nuova classe o di avvolgerla, questo potrebbe almeno darti un modo consistente per passare il mittente nella funzione chiamante o possibilmente costruire una struttura dati in cui le informazioni possono essere estratte dal destinatario. Dipende da ciò che sta cercando di realizzare –