असल में वहाँ एक gottcha है; आप यादृच्छिक रूप से क्रैश करेंगे! यह मेरा अनुभव रहा है। इसे इस तथ्य के साथ करना है कि अधिसूचना प्राप्त करने वाली वस्तु अधिसूचना के प्रेषक के समान धागे पर होती है।
Apple iOS Documentation on Notification Centers से:
एक बहु आवेदन में, सूचनाएं हमेशा धागा जिसमें अधिसूचना पोस्ट किया गया था, जो एक ही धागा है, जिसमें एक पर्यवेक्षक ही पंजीकृत नहीं हो सकता है में दिया जाता है।
यह अनिवार्य रूप से आपको सिरदर्द का कारण बन जाएगा।
अधिसूचना मुख्य थ्रेड पर कुछ द्वारा प्राप्त किया जा रहा है, तो मैंने पाया कि पृष्ठभूमि धागे से मुख्य थ्रेड में पॉपिंग एक अधिसूचना जारी करने के लिए इस बारे में जाने के लिए सबसे सुरक्षित तरीका है। यह काफी ऐसा करने के लिए सरल है:
//Call this to post a notification and are on a background thread
- (void) postmyNotification{
[self performSelectorOnMainThread:@selector(helperMethod:) withObject:Nil waitUntilDone:NO];
}
//Do not call this directly if you are running on a background thread.
- (void) helperMethod{
[[NSNotificationCenter defaultCenter] postNotificationName:@"SOMENAME" object:self];
}
दुर्भाग्य से इस प्रेषक और प्राप्तकर्ता के बीच एक सूक्ष्म युग्मन का परिचय है कि आप इस संशोधित कर रहे हैं रिसीवर को समायोजित करने के।
एक्सजोन्स बताते हुए एक बेहतर समाधान, प्रेषक को जो भी थ्रेड तय करता है, उस पर अधिसूचना भेजना है, और उसके बाद श्रोता को उचित थ्रेड का उपयोग करने के लिए ज़िम्मेदार बनाने के लिए जो कुछ भी आवश्यक है उसे करने के लिए जिम्मेदार बनाना है।
आशा है कि मदद मिली।
मैंने इस समस्या को मेरे उत्तर में एक टिप्पणी में संदर्भित किया। मुझे अधिसूचना और पर्यवेक्षक पोस्ट करने वाले ऑब्जेक्ट के बीच युग्मन के आपके समाधान को ठीक तरह से बी/सी पसंद नहीं है। ऑब्जेक्ट पोस्टिंग को जो भी थ्रेड पसंद है उसे पोस्ट करना चाहिए। रिसीवर को उस थ्रेड पर अधिसूचना को संभालना चाहिए जिसकी आवश्यकता है (उदा। रिसीवर मुख्य थ्रेड या किसी अन्य थ्रेड पर अधिसूचना अग्रेषित कर सकता है)। ऐप्पल इस विधि का नमूना कोड में भी उपयोग करता है। – XJones
मैं पूरी तरह से सहमत हूं। मैंने इस विधि को दर्शाने के लिए अपना जवाब अपडेट कर लिया है। – PixelCloudSt
@ पिक्सेल क्लाउडस्ट मैं इस विधि में युग्मन को समझता हूं, लेकिन रिसीवर को कई धागे पर सुनने के बारे में कैसे जाना होगा? –