2009-04-11 12 views
5

उदाहरण के लिए, जब स्मृति कम हो जाती है, तो सिस्टम UIApplicationDidReceiveMemoryWarningNotification अधिसूचना भेजता है। उस ऐप्पल ने उस बिंदु पर अपने दस्तावेज़ों में कहा है। लेकिन यह अधिसूचना कहां से आती है, और किस विधि को भेजा जाता है? या मैं कहां और कैसे पंजीकृत करूं जो मुझे अधिसूचित किया जाता है?अधिसूचना प्राप्त करने के लिए मैं कहां और कैसे एक वस्तु पंजीकृत कर सकता हूं?

उत्तर

5

यह अधिसूचना केंद्र में भेजा जाता है, जहां सभी अधिसूचनाएं केंद्रीकृत होती हैं। एक ऑब्जेक्ट जो इस अधिसूचना के बारे में सूचित करना चाहता है, खुद को अधिसूचना केंद्र में पंजीकृत करता है कि यह बताकर कि कौन सी सूचना अधिसूचना प्राप्त करना चाहती है और अधिसूचना उठाए जाने पर कौन सी विधि का आह्वान किया जाना चाहिए।

अधिक जानकारी के लिए आप Notification programming topics for Cocoa और NSNotification class reference पर एक नज़र डाल सकते हैं।

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning:) name: UIApplicationDidReceiveMemoryWarningNotification object:nil]; 

इसमें यह माना जाता अपनी कक्षा भी एक handleMemoryWarning विधि को लागू करता है कि इस प्रकार है::

17
वर्ग आप सूचना प्राप्त करना चाहते हैं बनाने के लिए निम्न विधि कॉल के प्रवर्तन कोड के भीतर से

- (void) handleMemoryWarning:(NSNotification *)notification 
{ 
} 
+4

उस कक्षा के डेलोक में removeObserver को कॉल करना न भूलें। – Abizern

+0

संपादित नहीं कर सकता। चयनकर्ता @ चयनकर्ता होना चाहिए (हैंडलमेमरी चेतावनी :) – DougW

+0

मैंने शुरुआत में कोड टैग का उपयोग करने की उपेक्षा की - फिक्स्ड। – m4rkk

5

एप्लिकेशन प्रतिनिधि का उपयोग करने और वैकल्पिक विधि को लागू करने के लिए बहुत आसान

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 

सबसे आम अधिसूचनाओं को एक प्रतिनिधि को कॉल में अनुवादित किया जाता है, आमतौर पर एक औपचारिक प्रोटोकॉल में वैकल्पिक तरीकों के लिए। आपका प्रतिनिधि जो भी वस्तु आपको पसंद हो सकता है।

+0

नोट करें कि आप अधिसूचना का नाम लेकर और शुरुआत से 'UI' को हटाकर, पहले से ही 'अधिसूचना' को हटाकर और पहले अक्षर को कम करके प्रतिनिधि नाम प्राप्त करते हैं। – Abizern

0

चेतावनी दीजिये कि आपके चयनकर्ता को अधिसूचना को तर्क के रूप में लेने की आवश्यकता होगी।

यदि आप @selector (handleMemoryWarning) और - (शून्य) हैंडल MemoryWarning {} जैसे कुछ का उपयोग करते हैं तो ऑब्जेक्ट अधिसूचना नहीं भेजेगा और आप अभी भी अपनी सभी मेमोरी पर होंगे।

मुझे बस इस से काटा गया था।

+1

पूरी तरह से सच नहीं है (और मैंने अभी भी कोशिश की है)। आप चयनकर्ता का उपयोग बिना पैराम या पैराम्स के साथ कर सकते हैं। आईओएस सिम्युलेटर में "हार्डवेयर -> स्मृति चेतावनी अनुकरण" का भी उपयोग करें। –

+0

वास्तव में? क्या आपने परीक्षण किया है कि सभी उपकरणों और ओएस संस्करणों में? मैंने परीक्षण किया जब यह मेरे कोड में पहले से ही हो रहा था। –

+0

हाय बेन, मुझे शक नहीं है कि आपने इसे कुछ डिवाइस और ओएस संस्करण पर देखा है। उस ने कहा, मैंने कभी भी एक प्रदर्शन के बारे में 'प्रदर्शन चयनकर्ता' देखभाल नहीं देखी है या नहीं। कोई विचार यह डिवाइस और ओएस संस्करण क्या था? –

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

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