Bu kod oldukça basit, değil mi? Init yöntemiyle aktarılan temsilci tutmam gerekip gerekmediğini bilmiyorum.Delegeler hakkında soru
@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
İlk düşüncem hayır, ancak bu kod biraz farklı görünüyor. Sayımı koruyamayacağımı biliyorum, ancak delegelerle başa çıkmanın uygun yolunu bilmek istiyorum.
// 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 biraz özel bir durumdur. Delegeyi elinde tutması o kadar da fazla değil, ancak bağlantı süresi boyunca onu korur çünkü delegelerin mesajlarını almayı durdurmanın tek yolu bağlantıyı iptal etmektir. yani normal olarak bir temsilci tutmaz ve NSURLConnection'ın bunun gibi davranışı bir uygulama detayıdır; Güvenmeniz gereken veya genellikle taklit edeceğiniz bir şey değil. Ayrıca, bir delegenin _class_ olması alışılmadık bir durumdur. Normalde bir temsilci protokolü bildirirsiniz. –
Teşekkürler Mike, ne gördüğümü açıklıyor. – Jab