Ich habe zwei Klassen, ClassA, die ClassB instanziieren und eine Methode als Delegat übergeben. ClassB wird schließlich den Delegaten von ClassA aufrufen. Muss ich eine Rücklage für ClassA hinzufügen, wenn ClassB sie speichert?Referenzzählung beim Implementieren eines Delegaten für die benutzerdefinierte Klasse in ObjectiveC
Ich folge der "Implementieren eines Delegaten für eine benutzerdefinierte Klasse" aus dem "Cocoa Fundamentals Guide: Kommunikation mit Objekten", aber der Beispielcode scheint Speicherverwaltung nicht berücksichtigt.
ClassA wird den Delegaten festlegen und erwartet, später wieder aufgerufen zu werden, wenn ClassB mit seiner Arbeit fertig ist.
@implementation ClassA
-(void)launchSomething
{
ClassB *classB = [[ClassB alloc] init];
[classB setCallback:self withSelector:@selector(deferredWork)];
// do some other stuff, assign class B to some View and eventually release class B
}
-(void)deferredWork
{
NSLog(@"this is the method that will be deferred till some point in time");
}
Header-Datei für die Klasse B, die gespeichert werden und dann später den Delegaten aufrufen:
@interface ClassB
id targetObject;
SEL targetMethod;
-(void) setCallback:(id)anObject withSelector:(SEL)aMethod
ClassB Implementierung:
@implementation ClassB
-(void) setCallback:(id)anObject withSelector:(SEL)aMethod
{
// QUESTION: Do I need to add a 'retain' here on the targetObject?
targetObject = anObject;
targetMethod = aMethod;
}
-(void) someWorkLater
{
if ([targetObject respondsToSelector:@selector(targetMethod)]) {
// invoke the target object with the specific method
[targetObject targetMethod];
}
}