Objective-C verwendet ein ausgeklügeltes Nachrichtenübergabesystem, wenn ein Objekt eine Methode für ein anderes Objekt aufruft. Ich möchte wissen, ob es innerhalb der aufgerufenen Methode möglich ist zu bestimmen, was das aufrufende Objekt war?Ist es möglich, mithilfe von Objective-C-Laufzeitfunktionen zu bestimmen, woher eine Methode aufgerufen wurde?
Zum Beispiel:
@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
Was könnte ich in der Kommentarzeile schreiben, um die Behauptung Pass zu machen, wenn ich performTest
ausführen?
NSInvocation auch nichts hat, über den Anrufer - nur Ziel, Wähler und Argumente. –
Aus diesem Grund schlug ich vor, eine neue Klasse zu erstellen oder zu umschließen. Dies könnte Ihnen zumindest eine konsistente Möglichkeit geben, den Absender an die aufrufende Funktion zu übergeben oder eine Datenstruktur aufzubauen, von der die Informationen auf der Empfängerseite abgerufen werden können. Es hängt davon ab, was er zu erreichen versucht –