नंबर 1 कंपाइलर और लिंकर द्वारा देखे गए कोड की मात्रा को कम करने के लिए MyOtherObject वर्ग की घोषणा करके अन्य दो से भिन्न होता है और संभावित रूप से परिपत्र संदर्भों से भी बचता है। अगर आप इसे इस तरह करते हैं तो # मीम को .m फ़ाइल में रखना याद रखें।
एक @property, (और .synthesize इन .m) फ़ाइल की घोषणा करके, आप मेमोरी शब्दार्थों के साथ ऑटो-जनरेट एक्सेसर मेथड्स को निर्दिष्ट करते हैं कि आप कैसे निर्दिष्ट करते हैं। ज्यादातर वस्तुओं के लिए अंगूठे का नियम रेटेन है, लेकिन उदाहरण के लिए एनएसएसट्रेस, कॉपी का उपयोग करना चाहिए। जबकि सिंगलेट्स और डेलिगेट्स को आमतौर पर असाइन का उपयोग करना चाहिए। हाथ से लिखने वाले एक्सेसर्स थकाऊ और त्रुटि-प्रवण होते हैं इसलिए यह बहुत अधिक टाइपिंग और गूंगे बग्स को बचाता है।
इसके अलावा, एक संश्लेषित संपत्ति की घोषणा करने से आप इस तरह डॉट नोटेशन का उपयोग कर एक एक्सेसर विधि को कॉल कर सकते हैं:
self.otherObj = someOtherNewObject;
MyOtherObject *thingee = self.otherObj;
सामान्य के बजाय, संदेश-गुजरने का तरीका:
[self setOtherObject:someOtherNewObject];
MyOtherObject *thingee = [self otherObj];
पर्दे के पीछे आप वास्तव में इस तरह दिखने वाली एक विधि कह रहे हैं:
- (void) setOtherObj:(MyOtherObject *)anOtherObject {
if (otherObject == anOtherObject) {
return;
}
MyOtherObject *oldOtherObject = otherObject;
otherObject = [anOtherObject retain];
[oldOtherObject release];
}
…या यह
- (MyOtherObject *) otherObject {
return otherObject;
}
बट में कुल दर्द, सही। अब कक्षा में प्रत्येक आइवर के लिए ऐसा करें । यदि आप इसे बिल्कुल ठीक नहीं करते हैं, तो आपको एक स्मृति रिसाव मिलता है। कम्पाइलर को काम करने देने के लिए सबसे अच्छा है।
मैं देखता हूं कि नंबर 1 में एक आइवर नहीं है। यह मानते हुए कि एक टाइपो नहीं है, यह ठीक है क्योंकि @property / @synthesize निर्देश आपके लिए एक ivar घोषित करेगा, साथ ही पर्दे के पीछे भी। मेरा मानना है कि मैक ओएस एक्स - स्नो लेपर्ड और आईओएस 4 के लिए यह नया है।
नंबर 3 में वे एक्सेसर्स उत्पन्न नहीं होते हैं, इसलिए आपको उन्हें स्वयं लिखना होगा। यदि आप चाहते हैं कि आपके एक्सेसर के तरीकों के साइड इफेक्ट्स हों, तो आप अपना स्टैण्डर्ड मेमोरी मैनेजमेंट डांस करते हैं, जैसा कि ऊपर दिखाया गया है, तो एक्सेसर मेथड के अंदर आपको जो भी साइड वर्क करना है, वह करें। यदि आप एक संपत्ति को संश्लेषित करते हैं और साथ ही अपना खुद का लिखते हैं , तो आपके संस्करण की प्राथमिकता है।
क्या मैंने सब कुछ कवर किया?