यहाँ से http://www.macosxguru.net/article.php?story=20030713184140267
- (id)getMyInstance
{
return myInstanceVar ;
}
या
- (id)getMyInstance
{
return [[myInstanceVar retain] autorelease] ;
}
क्या अंतर है? दूसरा एक कॉलर को एक कंटेनर ऑब्जेक्ट का इंस्टेंस वैरिएबल प्राप्त करने की अनुमति देता है, कंटेनर का निपटान करता है और आवृत्ति चर के अप्रत्यक्ष रूप से इंस्टेंस वैरिएबल के रिलीज से चोट पहुंचाने के बिना, वर्तमान ऑटोरेलेज्ड पूल की अगली रिलीज तक इंस्टेंस चर के साथ खेलना जारी रखता है अपने कंटेनर की रिहाई के द्वारा उत्पन्न:
aLocalVar = [aContainer getAnInstanceVar] ;
[aContainer release];
doSomething(aLocalVar);
"हो" पहले के रूप में कार्यान्वित किया जाता है, तो आप लिखना चाहिए:
aLocalVar = [[aContainer getAnInstanceVar] retain];
[aContainer release];
doSomething(aLocalVar);
[aLovalVar release];
प्रथम रूप की अवधि में थोड़ा और अधिक कुशल है कोड निष्पादन गति। हालांकि, यदि आप दूसरों द्वारा उपयोग किए जाने वाले ढांचे को लिख रहे हैं, तो शायद दूसरे संस्करण की सिफारिश की जानी चाहिए: यह आपके ढांचे का उपयोग करने वाले लोगों के लिए जीवन को थोड़ा आसान बनाता है: उन्हें क्या करना है इसके बारे में बहुत कुछ नहीं सोचना है ... ;) यदि आप पहली शैली संस्करण चुनते हैं, तो इसे अपने दस्तावेज़ में स्पष्ट रूप से बताएं ... आप जिस भी तरीके से चयन करेंगे, याद रखें कि संस्करण 1 से संस्करण 2 में बदलना क्लाइंट कोड के लिए सहेजा जाता है, जब संस्करण 2 से संस्करण 1 में वापस जा रहा है मौजूदा क्लाइंट कोड तोड़ें ...
यह निर्भर करता है। उदाहरण के लिए, यह गुणों के लिए एक पूर्ण आवश्यकता है जिसे कई धागे से एक्सेस किया जा सकता है। आम तौर पर, ऐसी परिस्थितियां जो अक्सर नहीं आती हैं वे हैं जो वास्तव में कष्टप्रद सिर-स्क्रैचर्स का कारण बनती हैं। –
मुझे लगता है कि मैं कई धागे के संबंध में क्या कह रहा हूं, देख सकता हूं, क्योंकि उसके बाद आप कई स्वतंत्र रिलीज पूल और रन लूप कर सकते हैं। मुझे अभी भी लगता है कि सेटटर में ऑटोरेलीज उस मामले में अधिक समझ में आता है। –
और बहु-थ्रेडेड एक्सेस के मामले में, मैं आमतौर पर [ओब्जे प्रतिलिपि] का उपयोग करता हूं - वस्तुओं के अलग-अलग उदाहरण होने से संघर्ष के किसी भी मौके को समाप्त कर दिया जाता है। –