objective c - Difference between using self.variable and _variable when init these variables -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 4 जवाब
  • 6 जवाब

मैं उदाहरण चर और संपत्ति को जानता हूँ मैं अक्सर लोगों को एक यूआईएलएबल जैसा मानता हूं

  self.label = [[UILabel alloc] init]; // और _label = [[UILabel alloc] init];  

तो, वस्तु निर्धारित करने के लिए self.label और _label का उपयोग करने में क्या अंतर है?

अंतर सरल है: self.label = [[UILabel alloc] init] का उपयोग वास्तव में विधि का आह्वान करेंगे [स्वयं सेटलेबेल: [[यूआईएलबीएल एलोक] इनिट]] , और _label = [[यूआईएलबीएल एलोक] इनिट] का उपयोग करने से सीधे आवृत्ति चर को मान दिया जाएगा।

व्यवहार में इसका मतलब यह है कि डॉट सिंटैक्स का उपयोग करना सबसे अच्छा होता है क्योंकि विधिवत विधि आपके लिए बहुत सारे सामान हैंडल करती है, इसमें निम्न शामिल हैं:

  • मेमोरी प्रबंधन : उदाहरण के लिए, यदि आप विशेषता 'मजबूत' या 'बनाए रखना' के साथ कोई संपत्ति घोषित करते हैं, तो लागू की गई विधि को असाइन किए गए ऑब्जेक्ट को बनाए रखना चाहिए।
  • कुंजी-मान कोडिंग नोटिफिकेशन: < / Strong> हो सकता है कि कक्षा संपत्ति के लिए है, जिसका अर्थ है कि आवेदित पद्धति पर्यवेक्षक वस्तुओं में परिवर्तनों को सूचित करेगी।

क्यों क्या आप डॉट सिंटैक्स का उपयोग नहीं करेंगे? दो संभावित कारण हैं:

  • साइड इफेक्ट से बचने के लिए: एक अच्छा अभ्यास है कि प्रारंभिक विधि के अंदर डॉट सिंटैक्स का उपयोग न करें। ऐसा इसलिए है क्योंकि हम मान असाइन करना चाहते हैं लेकिन सुरक्षा कारणों के लिए आविष्कृत विधि के अन्य दुष्प्रभाव नहीं करना चाहते हैं।
  • प्रदर्शन: यह शायद दुर्लभ है, लेकिन शायद आप उच्च निष्पादन के साथ एक विधि को लागू करने की कोशिश कर रहे हैं और उदाहरण चर का उपयोग करके सीधे एक विधि को लागू करने की लागत को बचा सकता है।

यदि आप अधिक जानना चाहते हैं, तो मैं सुझाव देता हूं कि आईओएस गाइड जो अधिक में वर्णित है उन विचारों का विस्तार करें जिनके बारे में मैंने यहां उल्लेख किया है।


Comments

Popular posts from this blog

ios - How do I use CFArrayRef in Swift? -

eclipse plugin - Run java code error: Workspace is closed -

c - Error on building source code in VC 6 -