अपने इंटरफ़ेस में, आप औपचारिक रूप से ब्रेसिज़ के बीच एक उदाहरण चर घोषित कर सकते हैं, या ब्रेसिज़ के बाहर @property
के माध्यम से या दोनों। किसी भी तरह से, वे कक्षा के गुण बन जाते हैं। अंतर यह है कि यदि आप @property
घोषित करते हैं, तो आप @synthesize
का उपयोग करके कार्यान्वित कर सकते हैं, जो आपके लिए आपके गेटर/सेटर को ऑटो-कोड करता है। ऑटो-कोडर सेटर पूर्णांक को शुरू करता है और उदाहरण के लिए शून्य पर तैरता है। यदि आप एक आवृत्ति चर घोषित करते हैं, और संबंधित @property
निर्दिष्ट न करें, तो आप @synthesize
और का उपयोग नहीं कर सकते हैं अपना खुद का गेटर/सेटर लिखना चाहिए।
आप हमेशा अपना निर्दिष्ट करके ऑटो-कोडित गेटर/सेटर को ओवरराइड कर सकते हैं। यह आमतौर पर managedObjectContext
संपत्ति के साथ किया जाता है जो आलसी लोड होता है। इस प्रकार, आप एक संपत्ति के रूप में अपना managedObjectContext
घोषित करते हैं, लेकिन फिर -(NSManagedObjectContext *)managedObjectContext
विधि भी लिखें। याद रखें कि एक विधि, जिसमें एक आवृत्ति चर/संपत्ति के समान नाम है "गेटटर" विधि है।
@property
घोषणा पद्धति आपको अन्य विकल्पों की अनुमति देती है, जैसे कि retain
और readonly
, जो आवृत्ति परिवर्तनीय घोषणा विधि नहीं है। असल में, ivar
पुराना तरीका है, और @property
इसे बढ़ाता है और इसे प्रशंसक/आसान बनाता है। आप या तो स्वयं का उपयोग कर सकते हैं। उपसर्ग, या नहीं, इससे कोई फर्क नहीं पड़ता जब तक कि उस वर्ग के लिए नाम अद्वितीय नहीं है। अन्यथा, यदि आपके सुपरक्लस के पास आपके जैसा संपत्ति का वही नाम है, तो आपको यह निर्दिष्ट करने के लिए कि आप किस नाम के बारे में बात कर रहे हैं, स्वयं को self.name या super.name जैसा कहना है।
इस प्रकार, आप कम और कम लोगों को ब्रेसिज़ के बीच ivar
रों घोषित देखेंगे, और बजाय सिर्फ @property
को निर्दिष्ट, और फिर @synthesize
कर की ओर शिफ्ट। आप @synthesize
को अपने कार्यान्वयन में @property
के बिना नहीं कर सकते हैं। सिंथेसाइज़र केवल यह जानता है कि @property
विनिर्देश से यह किस प्रकार की विशेषता है।संश्लेषण कथन आपको गुणों का नाम बदलने की भी अनुमति देता है, ताकि आप अपने कोड के अंदर एक नाम (शॉर्टेंड) द्वारा किसी संपत्ति को संदर्भित कर सकें, लेकिन .h फ़ाइल में बाहर पूर्ण नाम का उपयोग करें। हालांकि, वास्तव में एक्सकोड के वास्तव में ठंडा स्वतः पूर्ण होने के साथ, यह एक लाभ से कम है, लेकिन अभी भी वहां है।
आशा है कि इससे वहां मौजूद सभी भ्रम और गलत जानकारी को दूर करने में मदद मिलेगी।
दूसरी बोल्ड नहीं 'MyObject.m' में 'MyObject.h' क्यों है? –