/ / उद्देश्य-सी [डुप्लिकेट] में पैरामीटर में उपसर्ग "_" का अर्थ क्या है - आईओएस, उद्देश्य-सी

उद्देश्य-सी [डुप्लिकेट] में पैरामीटर में उपसर्ग "_" का अर्थ क्या है - आईओएस, उद्देश्य-सी

मैं कई महीनों के लिए आईओएस के साथ खेल रहा हूं,@property का "सेटटर और गेटटर" बनाने के लिए हमेशा @ सिंथेसाइज़ का उपयोग करें। लेकिन कुछ ट्यूटोरियल में, मैं अक्सर @ सिंथेसइज़ param = _param देखता हूं, मुझे इसका अर्थ काफी नहीं मिलता है।

For example: in .h file

@property (nonatomic, retain) NSString *param1;
@property (nonatomic, retain) NSString *param2;

in .m file

@synthesize param1; //this is what I like to do
@synthesize param2 = _param2; // this is what "experienced" programmer does

मेरी आदत से, मैं इस उदाहरण को प्राप्त करने के लिए self.param1, या सिर्फ param1 का उपयोग कर सकता हूं, क्या रास्ते में कोई अंतर है?

दूसरों से, वे अन्य दृष्टिकोण के बजाय _param2 का उपयोग करना पसंद करते हैं। मुझे पता है कि गेटटर / सेटर के साथ इसका कुछ संबंध है, लेकिन मैं अभी भी स्पष्ट नहीं हूं।

क्या कोई अपना अंतर और पेशेवर / विपक्ष समझा सकता है?

बहुत बहुत धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 7

जब आप उपयोग करते हैं

@synthesize param2 = _param2;

इसका मतलब है कि आप सीधे आवृत्ति चर का उपयोग करने के लिए एक अलग नाम का उपयोग कर रहे हैं।

(नए एक्सकोड संस्करणों में, यदि आप स्वयं को संश्लेषित नहीं करते हैं तो एक्सकोड आपके लिए एक लिखता है, वही एक जैसा)

यदि तुम प्रयोग करते हो:

_param2

आप सीधे आवृत्ति चर का उपयोग कर रहे हैं।

यदि तुम प्रयोग करते हो:

self.param2

आप वेटर / गेटर वेरिएबल ट्रफ तक पहुंच रहे हैं, और उन सेटटर / गेटर को आपके द्वारा सेट की गई गुणों का उपयोग करके परिभाषित किया गया है।

अंगूठे के नियम के रूप में, आप सीधे इनिट विधियों में ivar तक पहुंचना चाहते हैं, और शेष वर्ग में आप स्वयं का उपयोग करते हैं।

यदि आप इस पर अधिक जानकारी प्राप्त करना चाहते हैं, तो बस इस लिंक का पालन करें:

उद्देश्य-सी में डेटा को Encapsulating


जवाब के लिए 2 № 2

@synthesize param2 = _param2; अंतर्निहित आवृत्ति चर के लिए एक और नाम का उपयोग करता है। समर्थक यह है कि आप आसानी से गलती से ivar तक नहीं पहुंचते हैं।

इन दिनों आप स्वचालित रूप से संश्लेषित हो जाते हैं और यह दूसरे संस्करण का उपयोग करता है, इसलिए बस बाहर निकलें @synthsize सभी एक साथ और उपयोग करें self.param तथा _param.