मैंने ओबीजेसी एक्सेसर्स और संश्लेषित एक्सेसर्स पर कई प्रश्नों की खोज नहीं की है। यह सवाल "मुझे किसी मुद्दे को सुलझाने में मदद करें" प्रश्न है; मुझे एक जवाब की उम्मीद नहीं है, लेकिन मैं तर्क के आधार पर विशेषज्ञों की तलाश में हूं।आईओएस पर उद्देश्य-सी में, संश्लेषित गेटर्स का उपयोग करते समय "self.foo" और "foo" के बीच (शैली) अंतर क्या है?
id foo = [self.soundEffects objectAtIndex:1];
एक सहयोगी ने मुझसे पूछा कि समझाने के लिए क्यों ऊपर इस लाइन के अलावा कोई बेहतर है:
एक कोको टच कक्षा में, मैं इस तरह कुछ कोड (जहां soundEffects
है एक संश्लेषित NSArray संपत्ति) लिखते थे:
id foo = [soundEffects objectAtIndex:1];
अच्छा, कार्यात्मक रूप से, यह कोई अलग नहीं है।
self.soundEffects
हर दूसरे सांकेतिक शब्दों में बदलनेवाला कोड है कि यह एक इवर, नहीं एक स्थानीय रूप से scoped चर रहा है पर काम कर बताता है:पूर्व के लिए मेरे तर्क इस प्रकार हैं।
यदि हमें कभी भी आवश्यकता होती है, तो हम
soundEffects
गेटटर एक्सेसर में कस्टम तर्क डाल सकते हैं।कोई ठोस कारण नहीं है, यह एक वर्ष के लिए ओब्जे-सी में काम करने के बाद सही काम की तरह "महसूस करता है"।
उन्होंने तर्क # 1 और # 2 के रूप में मान्य स्वीकार करता है, लेकिन यह भी सुर देता है:
यह सिर्फ कोड ब्लोट नहीं है?
क्या किसी वर्ग को अपने स्वयं के iVars से सीधे किसी विधि (गेटटर) को कॉल किए बिना बात करने की अनुमति नहीं दी जानी चाहिए?
कोई भी लेने वाला?
मैं लगता है कि self.soundEffects बेहतर है क्योंकि अन्य ऑब्जेक्ट्स जान सकते हैं कि मान कुंजी-मूल्य कोडिंग के माध्यम से बदलता है, लेकिन अन्यथा वे नहीं जानते कि यह बदल गया है ... –
आपका मतलब कुंजी-मूल्य _observing_, b ऐसा कोई भी तरीका नहीं होगा, @TomH। '[self.myMutableArray addObject: anObject] 'पर्यवेक्षकों को सूचित नहीं करता है; केवल 'setMyMutableArray:' करता है। –
आह हाँ, आप दोनों मोर्चों पर सही हैं। लेकिन मेरा मानना है कि [यह थोड़ी देर हो गया है!] बिंदु अभी भी कुछ उपयोगों के लिए खड़ा है जहां यह सवाल आ सकता है, भले ही वह उस विशेष उदाहरण के लिए प्रासंगिक न हो। –