Gibt es in Objective C eine Möglichkeit, zur Laufzeit festzustellen, ob ein Objekt beibehalten wird und welches andere Objekt dieses Objekt beibehalten könnte?
Oder um es etwas anders zu formulieren:
Wenn der Hund angeleint ist, ist es dann möglich zu wissen, wer die Leine hält?
Angenommen, Sie haben folgendes hypothetisches Szenario:
MyObjectOne
y
MyObjectTwo
innerhalb der Implementierung von MyObjectTwo ist etwa so
- (void)setFirstObject:(MyObjectOne *)firstObj {
[firstObj retain];
// do stuff with object and under certain conditions don't release it
}
An anderen Stellen des Codes kann es andere Stellen geben, an denen die Objekte erstellt und aufbewahrt werden
// Create the two objects
myFirstObject = [[MyObjectOne alloc] init];
mySecondObject = [[MyObjectTwo alloc] init];
// ...
// Some process requires retaining the first object
[myFirstObject retain]
// ...
// some other place requires passing the first object to the second object
// at which point the first object is retained by the second object
[mySecondObject setFirstObject:myFirstObject];
// ...
// further on the first object is released
[myFirstObject release]
Zu diesem Zeitpunkt sollte myFirstObject theoretisch einen Retain Count von 1 haben, da es innerhalb von MyObjectTwo behalten wurde. Ist es auch möglich zu wissen, WAS das Objekt beibehält? Mit anderen Worten, ist es möglich zu wissen, dass myFirstObject einen Retain Count von 1 hat UND dass es derzeit von mySecondObject gehalten wird. Gibt es eine einfache Methode, um diese Informationen herauszufinden? Ist es möglich, einen bedingten Code zu haben, der wie dieser Pseudocode funktioniert:
if (MyObjectTwo is retaining MyObjectOne)
{
// do something in particular
}
Gehen wir noch ein paar Schritte weiter und nehmen wir an, dass MyFirstObject einen Retain-Wert von mehr als 1 hat und dass es weitere Objekte MyObjectThree und MyObjectFour gibt, die sich ähnlich wie MyObjectTwo verhalten, indem sie Methoden haben, die MyObjectOne behalten können. Und nun nehmen wir an, dass es mehrere Instanzen von MyObjectTwo, MyObjectThree und MyObjectFour gibt, von denen einige das erste Objekt behalten und andere nicht. Gibt es eine Möglichkeit, herauszufinden, wer und was das Objekt zurückhält?
Ich lerne noch, daher ist meine Syntax vielleicht nicht 100% korrekt, aber ich hoffe, die Frage ist klar.