मेरे एनएसओब्जेक्ट सबक्लास की -इनिट विधि में यह उदाहरण स्वयं को अपने कुछ कीपैथ्स के पर्यवेक्षक के रूप में जोड़ता है ताकि किसी भी कार्यवाही को ट्रिगर करने के लिए किसी भी समय प्रश्न में संपत्तियों में से कोई एक बदल जाए। जैसे।केवीओ का उपयोग करते समय स्वयं को स्वयं के पर्यवेक्षक के रूप में हटाने के लिए आवश्यक है?
[self addObserver:self forKeyPath:@"aProperty" options:0 context:nil];
[self addObserver:self forKeyPath:@"anotherProperty" options:0 context:nil];
...
मेरा प्रश्न मैं जरूरी ही की एक पर्यवेक्षक के रूप में उदाहरण को दूर करने की आवश्यकता है वर्ग के -dealloc विधि में, है? जैसे।
[self removeObserver:self forKeyPath:@"aProperty"];
[self removeObserver:self forKeyPath:@"anotherProperty"];
...
तरह से मैं यह आंकड़ा, एक वस्तु एक वस्तु है कि कोई लंबे समय तक तो एक अपवाद फेंक दिया जाता है, स्पष्ट रूप से एक समस्या मौजूद है के लिए एक संदेश भेजने का प्रयास करता है। लेकिन इस मामले में, एक ऑब्जेक्ट जो अब अस्तित्व में नहीं है, संभवतः संदेशों को स्वयं नहीं भेज सका, इसलिए यह कोई समस्या नहीं होनी चाहिए।
मुझे अभी तक कोई समस्या नहीं है, लेकिन यह अभी भी मुझे परेशान करता है क्योंकि मैंने इसे कभी स्पष्ट रूप से नहीं देखा है कि आप यह कर सकते हैं।
मैं बस अपना -dealloc विधि में
[self removeObserver:self forKeyPath ...]
की एक पूरी गुच्छा लिखने के लिए होने से बचने की कोशिश कर रहा हूँ।
आपकी प्रतिक्रिया के लिए धन्यवाद। मेरी कक्षा में एक अरब संपत्तियां हैं जिन्हें किसी भी घटना को ट्रिगर करने की आवश्यकता होती है जब भी उनमें से कोई भी बदलता है, इसलिए मैंने सोचा कि केवीओ और @ सिंथेसाइज्ड सेटर्स का उपयोग करके एक बेजिलियन सेटर्स लिखने से अधिक सुविधाजनक होगा। – hyperspasm
एक त्वरित नोट पर, स्वयं का निरीक्षण करने के वैध कारण हैं, उदा। सुपर क्लास की केवल पढ़ने योग्य संपत्ति को देखते हुए (उदाहरण के लिए जब NSNotification subclassing)। इसके अलावा केवीओ अपडेट भी हो सकते हैं जो सेटर द्वारा ट्रिगर नहीं किए जाते हैं (लेकिन इच्छा/किया गया चेंज वैल्यूफोरकी: सेटर के बाहर) –
कैलायर्स और कोर डेटा में एक और कारण 'गतिशील 'गुण है, जहां आपका स्वयं का सेटर स्वचालित सेटर तोड़ देगा कार्यक्षमता। –