सबसे पहले, ध्यान दें कि एक्सकोड के नवीनतम संस्करण को अब @ सिंथेसाइज की आवश्यकता नहीं है। आप इसे छोड़ सकते हैं (और चाहिए)। उस ने कहा, टुकड़े क्या करते हैं।
@property
एक्सेसर्स की घोषणा है। यह सिर्फ एक घोषणा है।
@property (nonatomic, readwrite, strong) NSString *something;
बनाम
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
मुख्य अंतर यह है कि @property
का उपयोग कर इन तरीकों की घोषणा की सुविधा देता है संकलक स्वचालित रूप से आपके लिए जनरेट (संश्लेषण) कार्यान्वयन है: वहाँ निम्नलिखित बीच बहुत कम अंतर है। कोई आवश्यकता नहीं है कि आप संकलक को आपके लिए ऐसा करने दें। आप something
और setSomething:
को हाथ से लागू करने के लिए बिल्कुल स्वतंत्र हैं, और ऐसा करना आम है। लेकिन, यदि आप उन्हें हाथ से लागू नहीं करते हैं, तो संकलक स्वचालित रूप से आपके लिए _something
नामक एक ivar बना देगा और गेटर और सेटर के लिए उचित कार्यान्वयन करेगा।
एक्सकोड के पुराने संस्करणों में, आपको स्पष्ट रूप से @synthesize
कीवर्ड का उपयोग करके ऑटो-पीढ़ी का अनुरोध करना था। लेकिन अब इसकी आवश्यकता नहीं है। आज, @synthesize
का उपयोग करने का एकमात्र कारण यह है कि यदि आप चाहते हैं कि ivar के पास गैर-मानक नाम हो (कभी ऐसा न करें)।
यहां एक महत्वपूर्ण बिंदु यह है कि something
और setSomething:
विधियां हैं। उनके बारे में जादुई कुछ भी नहीं है। वे विशेष "संपत्ति के तरीके नहीं हैं।"। वे सिर्फ तरीकों कि सम्मेलन पहुँच राज्य के एक टुकड़े से राज्य का यह टुकड़ा अक्सर एक इवर में संग्रहीत किया जाता हो, लेकिन हो सकता है की जरूरत नहीं है
और भी अधिक स्पष्ट है:। object.something
करता नहीं मतलब है" object
से इवर _something
नामित लौट आते हैं। "इसका मतलब है" [object something]
का परिणाम लौटने के लिए, जो कुछ भी करता है। "यह आम बात है कि एक इवर का मान देने के लिए के लिए।
आप अपने राज्य के सभी (आंतरिक घोषित करना चाहिए और बाहरी) @property
घोषणाओं का उपयोग करके, और आपको सीधे इवर घोषित करने से बचना चाहिए। आपको अपने एक्सेसर्स (self.something
) के माध्यम से हमेशा अपनी संपत्तियों तक पहुंचना चाहिए, सिवाय इसके कि init
और dealloc
विधियां। init
और dealloc
में, आपको सीधे ivar (_something
) का उपयोग करना चाहिए।
स्रोत
2012-10-04 15:19:25
इस तरह के बारे में सोचें यदि आपके पास '@ संपत्ति' अधिक संभावना है तो आपको '@ संश्लेषण' की आवश्यकता होगी। ऐसा इसलिए है क्योंकि हां '@ संपत्ति 'दुनिया को बता रही है कि एक सामान्य' गेटर 'और' सेटर 'की आवश्यकता होती है लेकिन' @ संश्लेषण 'वास्तव में' गेटर्स 'और' सेटर्स 'बना रहा है, आप इसे ओवरराइड कर सकते हैं और अपना खुद का बना सकते हैं 'गेटर्स' और 'सेटर्स' यदि आप जेनरेट किए गए लोगों को पसंद करते हैं तो वे बहुत बुनियादी होंगे। पॉल हेगर्टी द्वारा आईट्यून्सयू आईपैड और आईफोन एप्लीकेशन डेवलपमेंट की घड़ी देखें, इस तरह से मैं इसके बारे में सोचता हूं और यह अभी तक विफल नहीं हुआ है। – Popeye
बहुत बहुत धन्यवाद Popeye ... आईट्यून्स यू फैनस्टिक है !!! मैं वास्तव में पाठ 4 या पॉल की 2011 श्रृंखला पर हूं। मैं बस बैक अप ले रहा हूं, इन श्रृंखलाओं के साथ एक्सकोड 4 लर्निंग ऑब्जेक्टिव सी पढ़ रहा हूं ... फिर भी यह मुझे स्पष्ट रूप से स्पष्ट नहीं था। – RichWalt