कोष्ठक में चर को परिभाषित करना बस उन्हें उदाहरण चर की घोषणा की।
किसी संपत्ति को घोषित करने (और संश्लेषित) संश्लेषण के मानदंडों के अनुसार, आवृत्ति चर के लिए गेटर्स और सेटर्स उत्पन्न करता है। यह उद्देश्य-सी में विशेष रूप से महत्वपूर्ण है क्योंकि यह अक्सर गेटर्स और सेटर्स के माध्यम से होता है जो स्मृति प्रबंधित होती है (उदाहरण के लिए, जब एक इवर को एक मूल्य आवंटित किया जाता है, तो यह सेटटर के माध्यम से होता है कि निर्दिष्ट वस्तु को बरकरार रखा जाता है और अंत में जारी किया जाता है)। स्मृति प्रबंधन रणनीति से परे, अभ्यास भी encapsulation को बढ़ावा देता है और अन्यथा आवश्यक कोड की मात्रा को कम कर देता है।
ब्रैकेट में एक ivar घोषित करना और फिर एक संबंधित संपत्ति (जैसा कि आपके उदाहरण में) घोषित करना बहुत आम है, लेकिन यह कड़ाई से जरूरी नहीं है। संपत्ति को परिभाषित करना और संश्लेषण करना आवश्यक है, क्योंकि संपत्ति को संश्लेषित करना भी एक ivar बनाता है।
दृष्टिकोण वर्तमान में एप्पल (टेम्पलेट्स में) ने सुझाव दिया है:
हेडर फाइल में संपत्ति को परिभाषित करें, जैसे:
@synthesize gameCenter = __gameCenter;
:
@property (assign, readonly) gameCenter;
फिर कार्यान्वयन में & घोषित इवर संश्लेषण अंतिम पंक्ति gameCenter
संपत्ति को संश्लेषित करती है और दावा करती है कि संपत्ति को जो भी मूल्य सौंपा गया है, उसे संग्रहीत किया जाएगा __gameCenter
इवर। दोबारा, यह जरूरी नहीं है, लेकिन सिंथेसाइज़र के बगल में ivar को परिभाषित करके, आप उन स्थानों को कम कर रहे हैं जहां आपको अभी भी नामकरण के दौरान ivar का नाम टाइप करना होगा।
पढ़ने एक संपत्ति की घोषणा से आसानी से पढ़ सकते हैं (नहीं किया है 'परिभाषित', वैसे - गुण उद्देश्य-सी में परिभाषित नहीं किया जा सकता है) एक गेटर और/या सेटर विधि घोषित करता है, लेकिन * * * एक्सेसर विधियों को उत्पन्न नहीं करता है। एक्सेसर विधियों को संश्लेषित किया जाता है यदि कार्यान्वयन में संबंधित '@ संश्लेषण' होता है, जो वैकल्पिक है। साथ ही, यह शायद उल्लेखनीय है कि घुंघराले ब्रेसिज़ के अंदर घोषित चर को * आवृत्ति चर * के रूप में जाना जाता है। – jlehr
विस्तार के बिंदुओं पर: हाँ, यह @ सिंथेसाइज़ है जो वास्तव में एक्सेसर्स उत्पन्न करता है। हां, आप गुणों को "घोषित" करते हैं (और फिर कंस्ट्रैसिस में उनके व्यवहार को परिभाषित करते हैं)। प्रश्न के दायरे को देखते हुए, मुझे लगता है कि यह मानना उचित है कि हम जानते हैं कि "चर" एक आवृत्ति चर को संदर्भित करता है (उत्तर बार-बार "ivar" का उपयोग करता है)। – isaac
आगे विस्तार: ओबीजेसी एक डिजाइन रणनीति के रूप में encapsulation को बढ़ावा देता है। अन्य वर्गों को किसी ऑब्जेक्ट की आंतरिक स्थिति से सीधे गड़बड़ नहीं करनी चाहिए (वास्तव में, इन दिनों इसे आपकी कक्षा 'हेडर फ़ाइल में यथासंभव कुछ कार्यान्वयन विवरण दिखाने के लिए सबसे अच्छा देखा जाता है)। इसके बजाय, वे अपने घोषित गुणों तक पहुंचने के लिए गेटटर/सेटर विधियों (जैसे स्वचालित रूप से @ संपत्ति/@ संश्लेषण वाक्यविन्यास द्वारा बनाए गए) का उपयोग कर सकते हैं। यह ऑब्जेक्ट को मान वापस करने के लिए अनुरोधों पर प्रतिक्रिया करने की अनुमति देता है (कहें, आलसी लोड करके) या एक नया मान सेट करने के लिए (कहें, कुछ संबंधित UI को अपडेट करके)। – rickster