यह कोड बहुत आसान है, क्या यह सही है? मुझे नहीं पता कि मुझे इनिट विधि के माध्यम से पारित प्रतिनिधि को बनाए रखना चाहिए या नहीं।प्रतिनिधियों के बारे में प्रश्न
@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 एक विशेष मामला है। यह इतना नहीं है कि यह प्रतिनिधि को बरकरार रखे, लेकिन यह कनेक्शन_ की अवधि के लिए इसे बनाए रखता है क्योंकि प्रतिनिधि संदेश प्राप्त करने का एकमात्र तरीका कनेक्शन रद्द करना है। यानी आम तौर पर कोई प्रतिनिधि नहीं रखता है, और NSRLConnection का व्यवहार इस तरह का कार्यान्वयन विवरण है; ऐसा कुछ नहीं जिसे आपको भरोसा करना चाहिए या आम तौर पर अनुकरण करना चाहिए। इसके अलावा, एक प्रतिनिधि _class_ होना असामान्य है। आम तौर पर आप एक प्रतिनिधि प्रोटोकॉल घोषित करते हैं। –
धन्यवाद माइक, जो बताता है कि मैं क्या देख रहा हूं। – Jab