Objective-C utilise un système sophistiqué de transmission de messages lorsqu'un objet appelle une méthode sur un autre objet. Je veux savoir s'il est possible, dans la méthode appelée, de déterminer quel était l'objet appelant?Est-il possible d'utiliser les fonctions d'exécution d'Objective-C pour déterminer l'origine d'une méthode?
Par exemple:
@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
Que pouvais-je écrire dans la ligne commentée afin de faire passer l'assertion quand j'exécute performTest
?
NSInvocation n'a également rien sur l'appelant - cible juste, sélecteur et arguments. –
C'est pourquoi j'ai suggéré de dériver une nouvelle classe ou de l'enrouler, cela pourrait au moins vous donner un moyen cohérent de passer l'expéditeur dans la fonction appelante ou éventuellement de construire une structure de données où les informations peuvent être extraites. Cela dépend de ce qu'il essaie d'accomplir –