संपत्ति की घोषणा पर निश्चित रूप से 'कॉपी' लगाने से ऑब्जेक्ट ओरिएंटेड एनवायरनमेंट का उपयोग करने की सूरत में उड़ जाता है, जहां ढेर पर ऑब्जेक्ट्स को संदर्भ द्वारा पास किया जाता है - आपको यहां मिलने वाले लाभों में से एक यह है कि किसी ऑब्जेक्ट को बदलते समय, उस ऑब्जेक्ट के सभी संदर्भ नवीनतम बदलाव देखें। बहुत सारी भाषाएं समान व्यवहार से लाभ के लिए मूल्य प्रकार (यानी स्टैक पर संरचनाएं) की अनुमति देने के लिए 'रेफरी' या समान कीवर्ड की आपूर्ति करती हैं। व्यक्तिगत रूप से, मैं कॉपी का उपयोग करूंगा, और अगर मुझे लगा कि किसी संपत्ति के मूल्य को उस वस्तु से किए गए परिवर्तनों से संरक्षित किया जाना चाहिए, जिसे मैं असाइन किया गया था, तो मैं असाइनमेंट के दौरान उस ऑब्जेक्ट की प्रतिलिपि विधि को कॉल कर सकता हूं, जैसे:
p.name = [someName copy];
बेशक, उस संपत्ति को डिजाइन करते समय, जिसमें केवल वह संपत्ति होती है, केवल आपको पता चल जाएगा कि क्या डिजाइन उस पैटर्न से लाभान्वित होता है जहां असाइनमेंट प्रतियां लेती हैं - Cocoawithlove.com के पास कहने के लिए निम्नलिखित हैं:
"आपको एक सेट एक्सेसर का उपयोग करना चाहिए जब सेटर पैरामीटर उत्परिवर्तित हो सकता है लेकिन आपके पास चेतावनी के बिना किसी संपत्ति को बदलने की आंतरिक स्थिति नहीं हो सकती है " - इसलिए यह निर्णय कि क्या आप अनपेक्षित रूप से बदलने के लिए मूल्य खड़े कर सकते हैं यह सब आपके खुद का है। इस परिदृश्य की कल्पना करें:
//person object has details of an individual you're assigning to a contact list.
Contact *contact = [[[Contact alloc] init] autorelease];
contact.name = person.name;
//person changes name
[[person name] setString:@"new name"];
//now both person.name and contact.name are in sync.
इस मामले में, कॉपी का उपयोग किए बिना, हमारी संपर्क वस्तु नए मूल्य को स्वचालित रूप से लेती है; यदि हमने इसका उपयोग किया है, हालांकि, हमें मैन्युअल रूप से यह सुनिश्चित करना होगा कि परिवर्तनों का पता लगाया गया और समन्वयित किया गया। इस मामले में, शब्दार्थ को बनाए रखना वांछनीय हो सकता है; दूसरे में, प्रतिलिपि अधिक उपयुक्त हो सकती है।
name
जारी किया जाना चाहिएdealloc
या नहीं?