这段代码很简单,对吗?我不知道是否应该保留通过init方法传入的委托。关于代表的问题
@interface SomeClass : NSObject {
SomeClassDelegate *someClassDelegate;
}
-(id)initWithDelegate:(SomeClassDelegate *)delegate;
@end
@implementation SomeClass
-(id)initWithDelegate:(SomeClassDelegate *)delegate
{
[delegate retain]; // should I be doing this?
someClassDelegate = delegate;
}
-(void)dealloc
{
[delegate release]; // obviously only do this if I DO need to retain it
[super dealloc];
}
@end
我最初的想法是否定,但是这段代码似乎提示否则。我知道我不能依赖保留计数,但我想知道处理代表的正确方法。
// self's retain count is 1
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
// the retain count is now 2, did the init of URLConnection retain self?
NSURLConnection有点特殊。这并不是因为它保留了委托,而是在连接期间保留它,因为阻止接收委托消息的唯一方法是取消连接。即通常一个不保留一个委托,NSURLConnection的这种行为是一个实现细节;不是你应该依赖或通常模仿的东西。 此外,有一个委托_class_是不寻常的。通常你声明一个委托协议。 – 2009-04-19 14:53:51
感谢迈克,这解释了我所看到的。 – Jab 2009-04-19 15:56:39