このコードはかなりシンプルですが、それは正しいですか? 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_を持つのは珍しいことです。通常、デリゲートプロトコルを宣言します。 –
ありがとうマイク、それは私が見ていることを説明します。 – Jab