我有兩個類,ClassA將實例化ClassB並將方法作爲委託傳遞。 ClassB最終將調用ClassA的委託。 ClassB存儲它時,是否需要在ClassA上添加保留?在ObjectiveC中實現自定義類的代理時引用計數
我按照「Cocoa基礎指南:與對象通信」中的「爲自定義類實現委託」,但示例代碼演示似乎沒有考慮到內存管理。
ClassA將設置委託,並期望在ClassB完成它的工作後再被調用。爲ClassB的
@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");
}
頭文件會保存,再後來調用委託:
@interface ClassB
id targetObject;
SEL targetMethod;
-(void) setCallback:(id)anObject withSelector:(SEL)aMethod
ClassB的的實現:
@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];
}
}