से OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
टोटल 5 लेवल ऑफ़ मेमोरी वार्निंग (-1,3)।
मेमोरी लेवल चेतावनी विवरण के संबंध में, @ केनीटीएम का उत्तर उत्कृष्ट है।
मैं कई संबंधित बिंदुओं को जोड़ना चाहता हूं जो पीएम और अन्य की मदद कर सकते हैं।
मेमोरी लेवल वार्निंग होने पर आपको क्या करना चाहिए?
इन चेतावनियों में से किसी को भी प्राप्त करने पर, आपके हैंडलर पद्धति को किसी भी अनावश्यक स्मृति को तुरंत मुक्त करके जवाब देना चाहिए। उदाहरण के लिए, UIViewController क्लास का डिफ़ॉल्ट व्यवहार अपने दृश्य को शुद्ध करना है यदि वह दृश्य वर्तमान में दिखाई नहीं दे रहा है; उपवर्ग अतिरिक्त डेटा संरचनाओं को शुद्ध करके डिफ़ॉल्ट व्यवहार को पूरक कर सकते हैं। ऐसा एप्लिकेशन जो छवियों का कैश रखता है, वह वर्तमान में ऑनस्क्रीन नहीं होने वाली किसी भी छवि को जारी करके प्रतिक्रिया दे सकता है।
मेमोरी लेवल चेतावनी कैसे देखें?
से http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
जब सिस्टम आपके ऐप के लिए कम-मेमोरी चेतावनी भेजता है, तो तुरंत जवाब दें। जब भी मुफ्त मेमोरी की मात्रा सुरक्षित सीमा से कम हो जाती है, तो iOS सभी चलने वाले ऐप्स को सूचित करता है। (यह निलंबित ऐप्स को सूचित नहीं करता है।) यदि आपका ऐप इस चेतावनी को प्राप्त करता है, तो उसे यथासंभव मेमोरी खाली करनी चाहिए। ऐसा करने का सबसे अच्छा तरीका है कि कैश, छवि ऑब्जेक्ट्स और अन्य डेटा ऑब्जेक्ट के लिए मजबूत संदर्भों को हटा दिया जाए जिन्हें बाद में फिर से बनाया जा सकता है।
UIKit निम्न-मेमोरी चेतावनी प्राप्त करने के कई तरीके प्रदान करता है, जिनमें निम्न शामिल हैं:
- ApplicationDidReceiveMemoryWarning को लागू करें: आपके एप्लिकेशन प्रतिनिधि की विधि।
- अपने कस्टम UIViewController उपवर्ग में didReceiveMemoryWarning विधि को ओवरराइड करें।
- UIApplicationDidReceiveMemoryWarningNotificationnotification प्राप्त करने के लिए पंजीकरण करें।
अपने ऐप की मेमोरी फ़ुटप्रिंट को कैसे कम करें?
- स्मृति लीक को हटा दें।
- संसाधन फ़ाइलों को यथासंभव छोटा करें।
- बड़े डेटा सेट के लिए कोर डेटा या SQLite का उपयोग करें।
- संसाधनों को आलसी तरीके से लोड करें।
- अंगूठा विकल्प का उपयोग करके अपना कार्यक्रम बनाएं।
पर विवरण http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
मेमोरी को बुद्धिमानी से कैसे आवंटित करें?
- ऑटोरेल्ड ऑब्जेक्ट्स के अपने उपयोग को कम करें : स्वचालित संदर्भ गिनती (एआरसी) के साथ, ऑब्जेक्ट्स को आवंटित / इनविट करने के लिए बेहतर है और संकलक को आपके लिए उपयुक्त समय पर जारी करने दें। यह अस्थायी वस्तुओं के लिए भी सच है कि अतीत में आपको वर्तमान पद्धति के दायरे से बाहर रहने से रोकने के लिए ऑटोरेलिज्ड हो सकता है।
- संसाधनों पर आकार का आकार सीमित करें : जब कोई छोटा कार्य करेगा तो बड़ी संसाधन फ़ाइल को लोड करने से बचें। उच्च-रिज़ॉल्यूशन वाली छवि का उपयोग करने के बजाय, iOS-आधारित उपकरणों के लिए उचित आकार का उपयोग करें। यदि आपको बड़ी संसाधन फ़ाइलों का उपयोग करना चाहिए, तो उस फ़ाइल के केवल हिस्से को लोड करने के तरीके खोजें, जिनकी आपको किसी भी समय आवश्यकता है। उदाहरण के लिए, संपूर्ण फ़ाइल को मेमोरी में लोड करने के बजाय, फ़ाइल के कुछ हिस्सों को मेमोरी में मैप करने के लिए mmap और munmap फ़ंक्शन का उपयोग करें। स्मृति में फ़ाइलों के मानचित्रण के बारे में अधिक जानकारी के लिए।
- अनबाउंड प्रॉब्लम सेट से बचें : अनबाउंड प्रॉब्लम सेट को गणना करने के लिए मनमाने ढंग से बड़ी मात्रा में डेटा की आवश्यकता हो सकती है। यदि सेट के लिए उपलब्ध अधिक मेमोरी की आवश्यकता होती है, तो आपका ऐप गणनाओं को पूरा करने में असमर्थ हो सकता है। आपके ऐप्स को जब भी संभव हो ऐसे सेट से बचना चाहिए और ज्ञात मेमोरी सीमा के साथ समस्याओं पर काम करना चाहिए।