2010-10-18 12 views
23

देवताओं जैसे मेरी पृथक जंगल गांव में कई आदतें, parachuted हैNSNotificationCenter: क्यों हटाने को परेशान करने के लिए परेशानी?

- (void) dealloc { 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 

} 

उनके तरीके मेरे लिए अजीब हैं, फिर भी मैं अब भी उन्हें समझने के लिए चाहते हैं।

क्यों ढीला सफाई परेशान समाप्त होता है अगर उदाहरण के बंद होने वाला है? क्या संदर्भ/उस घटना को गिनती बरकरार रखी जाएगी? क्या यह कुछ प्रकार की अधिसूचना हैश टेबल को छेड़छाड़ कर देगा जो सभी श्रोताओं की एक सूची रखती है?

उत्तर

37

NSNotificationCenter पर्यवेक्षकों को बनाए रखने नहीं है। आप पर्यवेक्षक को दूर नहीं करते हैं, और पर्यवेक्षक पुनः आवंटित की जाती है, तो NSNotificationCenter एक dangling सूचक जो होगा (अक्सर) दुर्घटना पकड़े जब यह अगले पर्यवेक्षक को सूचित करने की कोशिश करता है छोड़ दिया है।

8

हालांकि व्यवहार में आपके कई अनियमित यूंग्लिंग संस्कारों के बिना दूर हो जाएंगे, क्योंकि सेंट सेंट जॉब्स ने आपके कई सुपर क्लास पर removeObserver इन्सेंटेशन देने के लिए प्रसन्नता की है। जैसे UINavigationController। यद्यपि यह किसी भी लेख में नहीं मिला है, लेकिन मुझे यह सच साबित हुआ है।

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