2013-02-07 14 views
5

जब कोई ऐप प्रोफाइल करते हैं, तो मुझे लगता है कि जब भी मैं कुछ क्रियाएं करता हूं (UIViews को शामिल करता है) लाइव बाइट्स लगभग 250 KB तक बढ़ता है।एक्सकोड - आवंटन उपकरण को समझना

वस्तुओं की सूची में देखते हुए, मुख्य (बढ़ते) अपराधी सिर्फ "malloc 144 बाइट्स" के रूप में पढ़ता है।

कभी-कभी मैंने ऑब्जेक्ट्स उपकरण का उपयोग उन ऑब्जेक्ट्स को खोजने के लिए किया है जो मैंने जितनी चाहें उतनी देर तक रखी हैं, लेकिन मुझे यकीन नहीं है कि "मॉलोक" ऑब्जेक्ट्स को कैसे समझें।

किसी भी मार्गदर्शन की सराहना की जाएगी।

+0

क्या आप किसी भी मौके से कोर डेटा का उपयोग कर रहे हैं? –

+0

नहीं, लेकिन मैं 256 UIImageViews लोड कर रहा हूं और लगातार अपनी परतों को अपडेट कर रहा हूं। – achiral

+0

मुझे यकीन नहीं है कि मेरे ऐप में बरकरार रखने वाले मॉलॉक्स का समूह भी है, लेकिन मैं उन्हें समझ नहीं सकता, मेरा कुल मेमोरी उपयोग 10 मेग्स के नीचे रहता है, इसलिए मैंने वास्तव में कुछ भी पीछा किया है, लेकिन आईडी को भी उत्तर में रूचि है। –

उत्तर

11

विचारों के एक जोड़े:

  1. आवंटन उपकरण महान है, लेकिन मैं Leaks पर ध्यान केंद्रित करना चाहते हैं, पहले। क्या आपके पास स्वास्थ्य का एक साफ बिल है?

  2. क्या आपने स्थिर विश्लेषक ("उत्पाद" मेनू पर "विश्लेषण") के माध्यम से अपना कोड चलाया है। खासकर गैर-एआरसी कोड में, जो कई मुद्दों की पहचान कर सकता है।

  3. क्या आप एआरसी का उपयोग कर रहे हैं? यदि ऐसा है, तो वह खोज को संक्षिप्त करता है।

  4. क्या आपके पास ज़ोंबी चालू हैं? इसके परिणामस्वरूप स्मृति जारी नहीं की जाएगी। लाश बंद करने के लिए सुनिश्चित करें।

  5. क्या आप वाकई एक मजबूत संदर्भ चक्र (उर्फ बनाए रखने चक्र) नहीं रखते हैं? आप NSLog या अपने व्यू कंट्रोलर के dealloc में ब्रेकपॉइंट्स डाल सकते हैं और सुनिश्चित कर सकते हैं कि यह कॉल हो रहा है और सुनिश्चित करें कि आपके पास एक मजबूत संदर्भ चक्र नहीं है (दो या दो से अधिक ऑब्जेक्ट्स के बीच एक गोलाकार संदर्भ जिसके परिणामस्वरूप न तो रिलीज़ हो रहा है)। (यदि आपके पास dealloc विधि नहीं है, तो बस NSLog कथन के साथ एक जोड़ें।) invalidate पर दोहराना NSTimer कुछ ऐसा अद्भुत उदाहरण है जो अनजाने में मजबूत संदर्भ चक्र का कारण बन सकता है। मुख्य मुद्दा यह है कि आपको यह पुष्टि करना होगा कि dealloc हो रहा है।

  6. क्या आप निश्चित रूप से अन्य व्यू कंट्रोलर की दूसरी प्रति को दबाकर/प्रस्तुत करने के बजाय दृश्य नियंत्रक को पॉप/डिस्प्ले कर रहे हैं? (विफलता NSLogdealloc विधि में/ब्रेकप्वाइंट मजबूत संदर्भ चक्र से पहले बिंदु में चर्चा के अलावा, इस कारण हो सकता है देखने के लिए।)

  7. अपने 256 (!) छवि विचारों पर आप imageNamed कर रहे हैं स्थापित करने के लिए image संपत्ति? imageNamed विधि कैश छवियों को स्मृति स्मृति जारी नहीं किया जाएगा जब तक आपको स्मृति चेतावनी नहीं मिलती है (हालांकि जब आप नई छवियों को पुनर्प्राप्त करते हैं, मौजूदा छवियों को पुनः प्राप्त नहीं करते हैं तो यह केवल स्मृति का उपभोग करेगा)।

नीचे की रेखा, संभावित मुद्दों का एक टन हो सकता है और समस्या का निदान करने में हमारी सहायता के लिए आपके प्रश्न में पर्याप्त नहीं है। आपको समस्या को कम करने में हमारी मदद करनी है।

लेकिन अपने नियंत्रकों को देखना शुरू करें और सुनिश्चित करें कि उन्हें अस्वीकार कर दिया जा रहा है जैसे उन्हें चाहिए। मुझे 144 बाइट malloc मुद्दों के बारे में आपका दर्द महसूस होता है, लेकिन यह हर बार 250kb उपभोग करने का अपराधी होने की संभावना नहीं है। malloc समस्या का स्रोत नहीं है, समस्या का स्रोत नहीं है, और malloc कॉल के स्रोत को ट्रैक करने में बहुत अधिक समय खर्च करने से पहले, मैं ऊपर सूचीबद्ध अधिक मूलभूत चीज़ों पर ध्यान केंद्रित करूंगा।

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