Objective-C używa wyrafinowanego systemu przekazywania komunikatów, gdy jeden obiekt wywołuje metodę na innym obiekcie. Chcę wiedzieć, czy możliwe jest, w ramach wywoływanej metody, określenie, czym był obiekt wywołujący?Czy można użyć funkcji środowiska wykonawczego Objective-C do określenia, skąd została wywołana metoda?
Na przykład:
@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
Co mogę napisać w komentowanej linii w celu uczynienia przepustkę twierdzenie kiedy wykonać performTest
?
NSInvocation również nie ma nic o rozmówcy - tylko cel, selektora i argumentów. –
Dlatego zaproponowałem wyprowadzenie nowej klasy lub owijanie jej wokół, to może przynajmniej dać ci spójny sposób przekazania nadawcy do funkcji wywołującej lub ewentualnie skonstruowania struktury danych, w której informacje mogą zostać wyciągnięte od końca odbiorcy. To zależy od tego, co stara się osiągnąć –