कोको में, addObserver:forKeyPath:options:context:
"न तो रिसीवर, न ही ऑब्सर्वर" बनाए रखता है। इसलिए मुझे लगता है कि स्वयं को अनुमति देने की अनुमति है; कि है, यह जब तक आप dealloc में पहली बात यह है के रूप में एक पर्यवेक्षक के रूप में self
पंजीकरण रद्द करना याद के रूप में की तरहकोको में स्वयं को देखकर
[self addObserver:self forKeyPath...]
कुछ करने के लिए पूरी तरह से वैध है।
क्या यह धारणा सही है?
यह एक अच्छा विचार नहीं है। आमतौर पर यह अपेक्षा की जाती है कि 'obj.foo = bar; '' [obj setFoo: bar]' के समतुल्य होना चाहिए; और इस पैटर्न से भटकने से आपके कोड को पढ़ने/बनाए रखने में – rpetrich
@rpetrich मैं सहमत हूं कि यह नहीं है एक अच्छा विचार (मैंने 18 महीने पहले उस उत्तर को लिखा था), लेकिन एक अलग कारण के लिए। मैं अब '@ संश्लेषण' का उपयोग नहीं करूंगा; अब मैं पूरा गेटर और सेटर लिखूंगा। कुछ अतिरिक्त लाइनों का अतिरिक्त बोझ अतिरिक्त विधि कॉल के बाद मानसिक रूप से लागत से अधिक है (मैं अभी भी '@ property' का उपयोग करता हूं)। मैं असहमत हूं कि सेटर्स (या गेटर्स) में साइड इफेक्ट्स स्वाभाविक रूप से खराब हैं। जहां संभव हो उन्हें टालना चाहिए। उदाहरण के लिए, 'hypotheticalQueryObject.maxResults = 4;' सेट करना वैध रूप से एक और खोज को ट्रिगर कर सकता है। –
@rpetrich वास्तव में इसकी गारंटी है। 'obj.foo = bar;' हमेशा 'setFoo:' के कार्यान्वयन का उपयोग करता है (भले ही आपने संश्लेषित एक ओवरराइड किया हो)। –