बेन का अधिकार - लेकिन मुझे इसके चारों ओर एक और संभावित रूप से नाजुक, रास्ता मिला। मैंने अभी यह खोज लिया क्योंकि मुझे हमेशा "... को हटा दिया गया था जबकि मुख्य मूल्य पर्यवेक्षक अभी भी इसके साथ पंजीकृत थे"
मुझे नहीं पता कि क्यों - लेकिन जब मैंने अपने init विधि में addObserver जोड़ा था, और ऑब्सर्वर को हटा दिया मेरी डीलोक विधि - मुझे अभी भी केवीओ मिल रहा था संदेश अभी भी देखा जा रहा था। मैंने कदम बढ़ाया और सत्यापित किया कि मेरा निकालना ऑब्सर्वर सही ढंग से बुलाया जा रहा था।
मैंने अपने addobserver को देखने के बजायडिडलोड विधि में स्थानांतरित कर दिया, और यह काम करने लग रहा था।
मैंने देखने में एक निकास ऑब्सर्वर छोड़ दिया DidUnload और dealloc में; लेकिन मुझे यह पसंद नहीं है क्योंकि यह संतुलित नहीं है। लेकिन सामान्य परिस्थितियों में, मेरा viewDidUnload को कॉल नहीं किया जाता है - अगर मुझे कम स्मृति अधिसूचना मिलती है तो यह केवल सुरक्षा है।
लेकिन मैं संभावित रूप से उस स्थिति में पहुंच सकता हूं जहां कम स्मृति घटना आती है, viewDidUnload को कॉल किया जाता है। अगर मैं उसके बाद कुछ समय बाद डेलोक दबाता हूं (इससे पहले कि मैं फिर से दृश्यलोड को हिट करता हूं), मैं हटाने के लिए दो बार कॉल कर दूंगा!
तो, मुझे लगता है कि मैं इसे अपने दृश्य में रखूंगा, और मेरे डीलोक।
मुझे अभी भी पता नहीं है कि अगर मैं अपने init विधि में addobserver करता हूं तो यह सही क्यों नहीं काम करता है।
क्या यह सच है कि 'dealloc' हमेशा नहीं कहा जाता है?'Init' में 'addObserver' को कॉल करना सुरक्षित होगा और' viewDidUnload' में' removeObserver' को कॉल करें - या यह योजना मेरे व्यू कंट्रोलर को मेमोरी चेतावनी के बाद एक बार फिर लोड होने के बाद पुन: पंजीकृत नहीं करेगी (जिसके कारण दृश्य अनलोड होने के बाद से यह दिखाया नहीं गया था)? – matm
इस मामले में RemoveObserver कहां रखना है, इस पर अभी भी स्पष्ट नहीं है। – Resh32
याद रखें कि 'viewDidUnload' को आईओएस 6.0 के बाद बहिष्कृत किया गया है ... – DanSkeel