2009-03-20 5 views
9

इसे डीबग करने के तरीके पर सलाह चाहिए। मैं सीमित वातावरण के साथ नया हूं और पिछले कोई एम्बेडेड या स्मार्ट फोन प्रोग्रामिंग अनुभव नहीं है इसलिए मैं कुछ सुराग का उपयोग कर सकता हूं। पहले से ही अवगत है: उपकरण, क्लेंजर स्टेटिक विश्लेषण, मैनुअल कोड समीक्षा, आदि सामान्य रूप से उपकरण बहुत उपयोगी होते हैं लेकिन काफी समय लेते हैं और बहुत समय जमा करते हैं! क्लेंजर ने मुझे भी बहुत मदद की है। ऐसा लगता है कि मैं सामान्य रूप से बहुत अधिक स्मृति का उपभोग कर रहा हूं और मैं सोच रहा हूं कि एक अच्छी रणनीति क्या है। क्या मैं कुछ शीर्ष-स्तरीय वस्तुओं को छोड़ता हूं? क्या कोई 'पसंदीदा रणनीति' है?आईफोन पर अनुप्रयोग डीडग्रेसिव मेमरीवार्निंग डीबग करने के लिए सबसे अच्छा तरीका?

बस सोच रहा है कि किसी ने सफलतापूर्वक इसका सामना किया है और यदि उनके पास कोई अन्य सुझाव है? सबको शुक्रीया।

उत्तर

2

असल में आपको यह चेतावनी मिल रही है क्योंकि (असुरक्षित रूप से) आईफोन खतरनाक रूप से स्मृति पर कम है। यह आम तौर पर दो कारणों में से एक के लिए हो सकता है;

  1. आपके पास मेमोरी लीक है।
  2. आप बहुत अधिक वस्तुओं को आवंटित कर रहे हैं और आपके डिज़ाइन पर फिर से विचार करने की आवश्यकता है।

पहले व्यक्ति के लिए आपको यंत्र चलाने और अपनी स्मृति आवंटन की जांच करनी चाहिए। यह वास्तव में आपके ऐप को धीमा कर सकता है (और अतिरिक्त मेमोरी की आवश्यकता है) इसलिए एक समय में अपने ऐप के परीक्षण क्षेत्रों को आजमाएं। जैसे यदि आपके पास कई बार उनके बीच दो बार स्विच है।

दूसरे के लिए आपको उन चीजों की जांच करनी होगी जो आप कर रहे हैं जिसके परिणामस्वरूप बड़ी स्मृति आवंटन हो सकती है। उदाहरण के लिए यदि आप फ़्लिकर ब्राउज़र लिख रहे हैं तो आपको किसी भी समय लोड की गई छवियों की संख्या को कम करने की आवश्यकता हो सकती है, या जब आप यह चेतावनी प्राप्त करते हैं तो कुछ अप्रयुक्त लोगों को मुक्त कर सकते हैं।

ये केवल सामान्य नियम हैं जो मैं आपके ऐप के बारे में और जानने के बिना सुझाव दे सकता हूं।

दुर्भाग्यवश आईफोन ओएस से वर्तमान मेमोरी आवंटन के आंकड़े प्राप्त करने के लिए कोई वास्तविक तरीका नहीं है (जिसे मैं जानता हूं)। इससे आपके आवेदन के उन क्षेत्रों को अलग करना मुश्किल हो जाता है जो अनजाने में भूख लगी हैं।

+1

3. आप नेटवर्क एक्सएमएल/images/डेटा (एक डेस्कटॉप की तरह) एक ही बार में स्मृति में सभी भरी हुई है कि नहीं किया जा सकता और एक बेहतर डिजाइन के लिए छोटे टुकड़ों – slf

+0

से निपटा जाना चाहिए विचारों के संदर्भ में से निपटने के लिए कर रहे हैं , ऐप्पल दस्तावेज़ में SQLite पुस्तकें उदाहरण हाइड्रेशन/निर्जलीकरण की एक रणनीति का वर्णन करता है। रीडमी अवधारणा का एक उत्कृष्ट स्पष्टीकरण प्रदान करता है और इसमें डेटा ऑब्जेक्ट्स हैं जो इस पैटर्न को लागू करते हैं। – hyuan

5

आईफोन ऐप में मेमोरी प्रबंधन के लिए बहुत सारे अच्छे लेख हैं। यहां कुछ उपयोगी लिंक दिए गए हैं।

चीजें आप सामान्य रूप में की

  1. रिलीज ध्यान रखना चाहिए कोई भी चर जो आप
  2. की जरूरत नहीं है हमेशासंभालऔर किसी भी चर जारी उपयोग
  3. में नहीं रोक ऑडियो/वीडियो खेल की तरह applicationDidReceiveMemoryWarning में किसी भी स्मृति-भारी प्रक्रियाओं, UIImagePickerController आदि

संपादित यह किसी भी अधिक लागू नहीं होता। imageNamed: में 3.x ओएस संस्करणों से पहले कैशिंग मुद्दे थे।मुद्दा अब और अस्तित्व में नहीं है: आपको रेटिना डिस्प्ले को आसान बनाना चाहिए:

  1. UIImage ऑब्जेक्ट्स बनाने के लिए imageNamed: का उपयोग न करें।
+0

मुझे पता है कि यह पुराना है, लेकिन सिर्फ सोच रहा है कि ऊपर 4 क्यों नहीं? छवि नाम का उपयोग करने में क्या गलत है? – ferdil

+3

छवि नामित: बिंदु अब लागू नहीं होता है। 3.x से पहले, छवि नामित छवियों को कैश करने के लिए प्रयुक्त होता है जो ऐप द्वारा उपयोग की गई मेमोरी को बढ़ाता है। उन्होंने अब काफी सुधार किया है। तो 3.x और ऊपर के साथ, आप इस विधि का उपयोग कर सकते हैं। – lostInTransit