मैं आमतौर पर नीचे दिए गए नमूना तरह NSNotification का उपयोग एक बेहतर तरीका है:कौन सा दूर करने के लिए अधिसूचना पर्यवेक्षक
viewDidLoad में:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
viewDidUnload में और dealloc:
[[NSNotificationCenter defaultCenter] removeObserver:self];
लेकिन एक दोस्त मुझे बताया कि मुझे [[NSNotificationCenter defaultCenter] removeObserver:self];
का उपयोग नहीं करना चाहिए क्योंकि यह सुपर क्लास समेत सभी पर्यवेक्षकों को हटा देगा। उन्होंने मुझे पर्यवेक्षक को एक-एक करके हटाने के लिए निम्नलिखित कोड का उपयोग करने का सुझाव दिया।
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName2 object:nil];
मैं ASIHttpRequest लाइब्रेरी की कोड (https://github.com/pokeb/asi-http-request) देख लिया है। यह मेरे दोस्तों के सुझाव का पालन करता है।
मैं जानना चाहता हूं कि मेरा मित्र सही है या नहीं? मेरी राय में, चूंकि वर्तमान उदाहरण अनलोड या डेलोक होगा, सुपर क्लास की अधिसूचना भी बेकार है। और क्या कोई सिस्टम UIViewController subclass उपयोग अधिसूचना है?
इसका अर्थ यह है कि यह "सुपर क्लास 'पर्यवेक्षक" को हटा देगा? एक पर्यवेक्षक एक वस्तु उदाहरण नहीं है। यदि इसे हटा दिया जा रहा है तो यह _must_ को सभी अधिसूचनाओं से खुद को अनधिकृत कर देगा, भले ही वे सुपर क्लास कोड में पंजीकृत हों। – MrTJ
@MrTJ मेरा मतलब अधिसूचना पर्यवेक्षक है जो सुपर की विधि में जोड़ा जाता है। हो सकता है कि क्लास इंस्टेंस के पिता को कुछ नोटिफिकेशन भी देखने की ज़रूरत हो, जब बच्चे का दृश्यडिउडलोड विधि कहा जाता है। – tangqiaoboy
हो सकता है, हो सकता है।यदि आप सुरक्षा में अपंजीकृत करना चाहते हैं तो सुरक्षा के लिए भी मैं दूसरी विधि (प्रति पर्यवेक्षक अनियंत्रण) – MrTJ