/ / क्या किसी ऑब्जेक्ट को ब्लॉक के अंदर एक मजबूत संदर्भ होने के लिए NSObject का विस्तार करना चाहिए? - उद्देश्य-सी, उद्देश्य-सी-ब्लॉक

किसी ऑब्जेक्ट को ब्लॉक के अंदर एक मजबूत संदर्भ होने के लिए NSObject का विस्तार करना चाहिए? - उद्देश्य-सी, उद्देश्य-सी-ब्लॉक

ऐप्पल से ब्लॉक प्रोग्रामिंग विषय: ब्लॉक और चर

उद्देश्य-सी ऑब्जेक्ट्स
जब एक ब्लॉक की प्रतिलिपि बनाई जाती है, तो यह ब्लॉक के भीतर उपयोग किए गए ऑब्जेक्ट वेरिएबल्स के मजबूत संदर्भ बनाता है।

क्या होगा यदि ऑब्जेक्ट एनएसओब्जेक्ट से विस्तार नहीं करता है? क्या यह प्रासंगिक है?

जैसे की एक संपत्ति को देखते हुए

@property(nonatomic, copy) FooBlock fooBlock;

निम्नलखित में से कोई

-(void)foo:(NSObject<Foo>*)foo
{
self.fooBlock = ^(){
[foo bar];
};
}

किसी भी अलग से

-(void)foo:(id<Foo>)foo
{
self.fooBlock = ^(){
[foo bar];
};
}

उत्तर:

जवाब के लिए 2 № 1

ध्यान दें कि दस्तावेज कहता है वस्तु चर, नहीं NSOjbect चर। सभी उद्देश्य-सी वस्तुओं को उनके आधार वर्ग के बावजूद, इस संदर्भ में समान माना जाता है।

जैसा कि अन्य ने इंगित किया है, आपको केवल यह सुनिश्चित करने की आवश्यकता है कि आपका ऑब्जेक्ट सामान्य स्मृति प्रबंधन चयनकर्ताओं को प्रतिसाद देता है - विशेष रूप से बनाए रखें और रिलीज़ करें।

खतरनाक रूप से, ध्यान रखें कि एक से प्राप्त करनाNSObject के अलावा बेस क्लास आमतौर पर मूर्खतापूर्ण है। यह संभव है (उदा। एनएसपीरोक्सी) लेकिन यह बहुत जटिल हो सकता है। सुनिश्चित करें कि ऐसा करने का आपके पास एक अच्छा कारण है।