इको और अन्य लोगों ने सही उत्तर दिए।
यहां एक सरल तरीका है: सीधे निजी सदस्य चर पर पहुंचें।
उदाहरण
शीर्ष लेख में .h फ़ाइल:
@property (strong, nonatomic, readonly) NSString* foo;
कार्यान्वयन में .m फ़ाइल:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
बस, इतना ही चाहिए। कोई उपद्रव कोई अव्यवस्था नहीं।
विवरण
Xcode 4.4 और LLVM कंपाइलर 4.0 ( Xcode 4.4 में नए फीचर्स ) के रूप में, आपको अन्य उत्तरों में चर्चा किए गए कामों से खिलवाड़ करने की आवश्यकता नहीं है:
synthesize
कीवर्ड
- एक चर की घोषणा
- कार्यान्वयन .m फ़ाइल में गुण को फिर से घोषित करना।
एक संपत्ति की घोषणा करने के बाद foo
, आप मान सकते हैं कि Xcode ने अंडरस्कोर के एक उपसर्ग के साथ नामित एक निजी सदस्य चर जोड़ा है _foo
:।
यदि संपत्ति घोषित की गई थी readwrite
, तो Xcode नाम की एक गेट्टर विधि foo
और नाम सेटर सेट उत्पन्न करता है setFoo
। जब आप डॉट नोटेशन (मेरा Object.myMethod) का उपयोग करते हैं तो इन तरीकों को स्पष्ट रूप से कहा जाता है। यदि संपत्ति घोषित की गई थी readonly
, तो कोई सेटर उत्पन्न नहीं होता है। इसका मतलब है कि बैकिंग वेरिएबल, अंडरस्कोर के साथ नामित किया गया है, जो स्वयं पढ़ा नहीं जाता है। readonly
बस इसका मतलब यह है कि कोई सेटर विधि को संश्लेषित नहीं किया गया था, और इसलिए एक संकलक त्रुटि के साथ एक मान सेट करने के लिए डॉट नोटेशन का उपयोग करना। डॉट नोटेशन विफल हो जाता है क्योंकि कंपाइलर आपको एक विधि (सेटर) को कॉल करने से रोकता है जो मौजूद नहीं है।
इसके आस-पास सबसे सरल तरीका सीधे सदस्य चर का उपयोग करना है, जिसका नाम अंडरस्कोर है। आप अंडरस्कोर-नामित चर घोषित किए बिना भी ऐसा कर सकते हैं! Xcode उस घोषणा को निर्माण / संकलन प्रक्रिया के हिस्से के रूप में सम्मिलित कर रहा है, इसलिए आपके संकलित कोड में वास्तव में परिवर्तनशील घोषणा होगी। लेकिन आप अपने मूल स्रोत कोड फ़ाइल में उस घोषणा को कभी नहीं देखते हैं। जादू नहीं, सिर्फ वाक्यगत चीनी ।
उपयोग self->
वस्तु / उदाहरण के एक सदस्य चर का उपयोग करने का एक तरीका है। आप इसे छोड़ सकते हैं, और बस var नाम का उपयोग कर सकते हैं। लेकिन मैं स्वयं + तीर का उपयोग करना पसंद करता हूं क्योंकि यह मेरे कोड को स्व-दस्तावेजीकरण बनाता है। जब आप देखते हैं कि self->_foo
आप अस्पष्टता के बिना जानते हैं जो _foo
इस उदाहरण पर एक सदस्य चर है।
वैसे, पेशेवरों और संपत्ति अभिवावकों के विचार-विमर्श के लिए प्रत्यक्ष आइवर एक्सेस बनाम डॉ मैट न्यूबर्गर के प्रोग्रामिंग आईओएस पुस्तक में पढ़ा गया विचारशील उपचार है । मुझे पढ़ना और फिर से पढ़ना बहुत मददगार लगा।