2012-01-09 18 views
5

मैंक्या ivar नाम को @ सिंथेसिस को अनावश्यक या एक अच्छा अभ्यास माना जाता है?

@synthesize name = _name; 

रूप Stanford iTunes U course on iOS (cs193p) जहां शिक्षक स्पष्ट रूप से कहते हैं हमेशा जब @synthesize का उपयोग कर समस्याओं से बचने के इवर नाम निर्दिष्ट करने के, इस तरह देखा है लेकिन जब Cocoa documentation on declared properties के माध्यम से ब्राउज़ मैं वास्तव में यह नहीं देखा है, या में कोई अन्य नमूना कोड।

यह मैं एक प्रश्न के लाता है, यह क्यों आवश्यक है? क्या संपत्ति नाम के साथ @synthesize का उपयोग करने के लिए पर्याप्त नहीं है? क्या कोई विशिष्ट समस्या है जो इससे बचने में मदद कर सकती है?

+0

[@ सिंथेसाइज ivarName = _ivarName सम्मेलन, वरीयता या प्रदर्शन?] के संभावित डुप्लिकेट? (Http://stackoverflow.com/questions/8333929/synthesize-ivarname-ivarname-convention-preference-or-performance) –

उत्तर

6

ऐसा करने के लिए इसका कारण यह सीधे पहुँचा है और इस तरह के कारण स्मृति प्रबंधन के मुद्दों से ivars को रोकने के लिए है। उदाहरण के लिए:

सही: self.name = newName; गलत: name = newName;

getters और संपत्ति के setters सुनिश्चित करना है कि स्मृति प्रबंधन सही ढंग से नियंत्रित किया जाता है। इवरों तक पहुंचने के लिए आपको स्पष्ट रूप से अग्रणी अंडरस्कोर टाइप करना होगा, जो दुर्घटना से करना बहुत मुश्किल है। सीधे ivars तक पहुँचने के लिए केवल कुछ ही समय में init, dealloc और getters और setters हैं।

0

यह निश्चित रूप से अनावश्यक नहीं है क्योंकि @synthesize name = _name; का @synthesize name; से दूसरा अर्थ है। चाहे आप अपनी संपत्तियों की तुलना में अपने इवरों को अलग-अलग नाम देना चाहते हों, वस्तुतः व्यक्तिगत वरीयता का मामला है। दोनों प्रकार पूरी तरह से ठीक हैं।

+0

लेकिन एक के रूप में उद्देश्य-सी के लिए नौसिखिया, मेरे पास कोई व्यक्तिगत वरीयता नहीं है। क्या मुझे कोई कारण नहीं है कि मुझे लंबे समय तक '@ सिंथेसाइज नाम = _name;' का उपयोग क्यों करना चाहिए? यदि मेरे पास कस्टम गेटर/सेटर नहीं है तो क्या यह वास्तव में कुछ भी बदलता है? –

1

आप इवर नाम निर्दिष्ट नहीं करते हैं, तो यह संपत्ति के रूप में एक ही नाम का उपयोग करेगा। तो इन दो बराबर हैं:

@synthesize name; 
@synthesize name = name; 

यदि सब आप कर रहे हैं name = name है, तो हाँ, यह पूरी तरह से बेमानी है।

कारण है कि लोगों को name = _name तरह बातें निर्दिष्ट इवर और संपत्ति के लिए एक अलग नाम का प्रयोग है। ऐसा करने का एक कारण यह है कि आप संपत्ति और इवर के बीच मिश्रित नहीं होते हैं, लेकिन स्पष्ट रूप से, यदि आप अंतर पर स्पष्ट नहीं हैं, तो यह छोटा बदलाव आपको बचाने के लिए नहीं जा रहा है।

+1

मुझे यकीन है कि यह है क्योंकि लोगों को "मिश्रित" कर रहे हैं, बल्कि गलती से संपत्ति के बजाय इवर का उपयोग कर को रोकने में मदद करने के लिए नहीं कर रहा हूँ। –

संबंधित मुद्दे

 संबंधित मुद्दे