2012-02-24 4 views
5

मुझे पता है कि डेलोक में सेटर्स का उपयोग समस्याएं पैदा कर सकता है, यदि कोई अन्य वस्तु किसी संपत्ति में बदलावों के लिए देख रही है। लेकिन हम उन्हें शुरुआती लोगों में क्यों नहीं इस्तेमाल करना चाहिए?उद्देश्य-सी में प्रारंभिक विधि में स्वयं का उपयोग करने का यह अच्छा अभ्यास क्यों नहीं है?

+0

लोगों के पास उद्देश्य-सी के लिए सभी प्रकार के "नियम" हैं, वे आपके ऊपर फॉइस्ट करने का प्रयास करते हैं। यदि आप उनमें से 90% सुरक्षित रूप से अनदेखा कर सकते हैं। –

उत्तर

6

-init में एक्सेसर्स का उपयोग न करने का एकमात्र कारण यह है कि आपकी ऑब्जेक्ट पूरी तरह से प्रारंभ नहीं हुई है और एक्सेसर इस पर निर्भर हो सकता है। यह केवल तब होने की संभावना है जब आपके पास उप-वर्ग है जो एक्सेसर विधियों को ओवरराइड करता है।

डीलोकेशन पर एक सममित समस्या है जिसमें एक ओवरराइड एक्सेसर आंशिक रूप से अस्वीकृत ऑब्जेक्ट पर नहीं बुलाया जा सकता है। यह भी मुद्दा है कि आप नकली केवीओ अधिसूचनाएं भेज सकते हैं।

यह उचित encapsulation के दिल में चला जाता है। उप-वर्गों को सुपर क्लास के कार्यान्वयन विवरणों की परवाह करने की आवश्यकता नहीं है।

8

मुझे प्रारंभकर्ताओं में एक्सेसर्स का उपयोग करने में कभी भी कोई समस्या नहीं आई है। हो सकता है कि यह सेटर्स और गेटर्स में आपके पास कितना जादू है - अगर एक्सेसर्स ने कुछ स्मार्ट किया है, तो आप प्रारंभकर्ता में उनका उपयोग करते समय परेशानी में पड़ सकते हैं।

अब जब मैं इसके बारे में सोचता हूं, तो मैं dealloc में एक्सेसर्स का भी उपयोग करता हूं। फिर, बिना किसी समस्या के। अगर कोई ऑब्जेक्ट देख रहा है, तो उसे यह सुनिश्चित करना चाहिए कि ऑब्जेक्ट को पहले स्थान पर नहीं हटाया जाए।

तो, जब तक कि कोई और एक आकर्षक काउंटर-तर्क के साथ आता है, मुझे लगता है कि आप init और dealloc दोनों में एक्सेसर्स का उपयोग करने का प्रयास कर सकते हैं और देख सकते हैं कि यह आपके लिए कैसे काम करता है।

संबंधित मुद्दे

 संबंधित मुद्दे