नहीं सब ही टिककर खेल इस रूप ले:
- (id)variable { return variable; }
... कि केवल सबसे आदिम रूप है। अकेले गुणों को और संयोजनों का सुझाव देना चाहिए, जो कार्यान्वयन को बदलते हैं। उपरोक्त आदिम अभिगमकर्ता स्मृति प्रबंधन, परमाणुता, या प्रतिलिपि अर्थशास्त्र के संयोजन के साथ उपयोग की जाने वाली मुहावरों के लिए जिम्मेदार नहीं है। subclass ओवरराइड में कार्यान्वयन भी नाजुक है।
कुछ वाकई संक्षिप्त उदाहरणों का पालन करें; वास्तविक कार्यक्रमों में चीजें स्पष्ट रूप से अधिक जटिल हो जाती हैं जहां कार्यान्वयन काफी जटिल हो जाते हैं।
1) गेटर उदाहरण चर वापस नहीं कर सकते।कई संभावनाओं में से एक:
- (NSObject *)a { return [[a copy] autorelease]; }
2) सेटटर आवृत्ति चर को बनाए रख सकता है। कई संभावनाओं में से एक:
- (void)setA:(NSObject *)arg
{
...
a = [arg copy];
...
}
3) यदि आप अपने कार्यक्रम है, जो यह मुश्किल बनाए रखने के लिए बनाता है के दौरान स्मृति प्रबंधन कार्यान्वयन के साथ खत्म। वर्ग के अर्थ विज्ञान (और कैसे यह उदाहरण चर 'रेफरी गिनती संभालती है) वर्ग के लिए रखा जाना चाहिए, और अपेक्षित परिणाम के लिए सम्मेलनों का पालन करें:
- (void)stuff:(NSString *)arg
{
const bool TheRightWay = false;
if (TheRightWay) {
NSMutableString * string = [arg mutableCopy];
[string appendString:@"2"];
self.a = string;
[string release];
// - or -
NSMutableString * string = [[arg mutableCopy] autorelase];
[string appendString:@"2"];
self.a = string;
}
else {
NSMutableString * string = [arg mutableCopy];
[string appendString:@"2"];
self.a = string;
[self.a release];
}
}
इन सरल नियमों का पालन करने में नाकाम रहने के लिए अपने कोड बनाए रखने के लिए कठिन बना देता है और विस्तार करने के लिए डीबग और दर्दनाक।
इसलिए इसका छोटा यह है कि आप अपने कार्यक्रम को बनाए रखना आसान बनाना चाहते हैं। किसी संपत्ति पर सीधे कॉलिंग जारी करने के लिए आपको कक्षा के आंतरिक कार्यों के बहुत से संदर्भ जानने की आवश्यकता होती है; यह स्पष्ट रूप से खराब है और अच्छे ओओडी के मजबूत आदर्शों को याद करता है।
यह लेखकों/उप-वर्गों/ग्राहकों को यह भी उम्मीद करता है कि वर्ग कैसे सम्मेलन से विचलित हो जाता है, जो मूर्खतापूर्ण और समय उठने पर समय लेने वाली है और मुद्दों के उठने पर आपको सभी आंतरिक विवरण जारी करना होगा (वे किसी बिंदु पर)।
वे कुछ छोटे उदाहरण हैं कि संपत्ति के परिणामस्वरूप कॉलिंग रिलीज कैसे समस्याएं पेश करता है। कई वास्तविक दुनिया की समस्याएं बहुत कमजोर हैं और उन्हें ढूंढना मुश्किल है।
यह एक बहुत ही खतरनाक सिफारिश है; गेटर हमेशा ऐसा नहीं लगेगा। असल में, अगर वह एक 'परमाणु' संपत्ति थी तो वह/-autorelease होगा। – bbum