कुछ निश्चित परिस्थितियों में जहां यह आम तौर पर self.
-expression एक संपत्ति का उपयोग करने के उपयोग करने के लिए हतोत्साहित किया है रहे हैं। आम तौर पर आपहमेशाउपयोगself
एक संपत्ति के किसी भी उपयोग के लिए । यह सबसे सुरक्षित और जटिल तरीका है। विशेष रूप से यदि आप बनाए रखा उपयोग करते हैं, तो स्मृति प्रबंधन आपके लिए किया जाएगा। इस नियम से
दो अपवाद:
- किसी भी
init
विधि।
dealloc
में।
दोनों मामलों में आप आंशिक रूप से प्रारंभ ऑब्जेक्ट से निपट रहे हैं। ऐसे कुछ दुष्प्रभाव होते हैं जो सेटर्स या गेटर्स का उपयोग करते समय हो सकते हैं - क्योंकि वे विधियां हैं और इसलिए ओवरराइड किया जा सकता है।
उदाहरण लिए, किसी प्रॉपर्टी foo
उस वर्ग B
द्वारा subclassed कर दिया गया है के साथ एक कक्षा A
ले। उपवर्ग B
एक संपत्ति bar
कहते हैं और foo
के लिए सेटर overrode। अब आप अपने init
-method setFoo:
कहता है, क्योंकि आप कुछ प्रारंभिक मूल्य के साथ self.foo = ...
इस्तेमाल किया। उप-वर्ग, हालांकि, इस सेटटर में bar
के मान तक भी पहुंचता है। लेकिन इस मामले में, ऐसा हो सकता है कि बार को कभी शुरू नहीं किया गया है और कुछ मनमानी डेटा पर अंक दिया गया है। मेरे कारण init में एक सेटर को कॉल करना क्रैश करता है, हालांकि संभावना आपके कोड में बहुत अधिक नहीं हो सकती है।
स्रोत
2010-11-02 19:03:17
के छोटे नियम तो ऐसा लगता है जैसे कि यह जावा 'this' अभिव्यक्ति है, जो हमेशा जब तक एक ही नाम – binnyb
आप सही कर रहे हैं के साथ चर के साथ काम की आवश्यकता नहीं है के समान है। लेकिन 'str1 = @" abc "' कार्य नहीं करेंगे: –
एक महत्वपूर्ण अंतर यह है कि 'self.str1 = @" abc "' एक्सेसर विधि ('' setStr1) का उपयोग करेगा। 'बनाए रखने' विशेषता वाले गुणों का उपयोग करते समय, यह अंतर महत्वपूर्ण है। तो, यह वास्तव में "जावा के समान नहीं है"। –