2011-02-18 9 views
6

मैं उद्देश्य-सी (जावा से आने) के लिए नया हूं और मुझे लगता है कि मुझे स्मृति प्रबंधन की बहुत अच्छी समझ मिल रही है। लेकिन जब मेरा ऐप लोड होता है, तो मुझे बहुत ही कम स्मृति रिसाव मिलती है, जो तब होता है जब गेम लोड हो रहा है (हम 32 से लगभग 512 बाइट्स के बारे में बात कर रहे हैं)।क्या आईओएस में कोई मेमोरी रिसाव बिल्कुल स्वीकार किया गया है?

यह रिसाव होने पर यादृच्छिक है, और ऐसा लगता है कि यह रिसाव ट्रिगर करने वाला उपयोगकर्ता नहीं है। आम तौर पर यह लगभग 20sec से 1min के बाद पता चला है।

डीबगर से प्राप्त जानकारी कभी भी वही नहीं होती है। कभी-कभी यह यूआईपीप्लिकेशंस "जिम्मेदार फ्रेम" होता है, कभी-कभी यह [UIWindow makeKeyAndVisible] होता है और कभी-कभी यह [UNibDecoder] है।

क्या यह एक "स्वीकृत" सीमा है, या ऐप को सभी को रिसाव नहीं करना चाहिए? यह मेरा पहला "बड़ा" ऐप है। मैंने एक मामूली flipsideview ऐप किया है, और वहां जहां कोई लीक नहीं है ..

दूसरी ओर, लीक की पहचान करने का सबसे अच्छा तरीका क्या है?

+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/1136511/does-apple-reject-leaking-iphone-apps – jakev

उत्तर

10

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

एलएलवीएम के स्थिर विश्लेषक आपके लिए इनमें से कुछ समस्याएं पा सकते हैं। अपने निर्माण को साफ करें, फिर Build मेनू से Build and Analyze चुनें। इंस्ट्रूमेंट्स में एक लीक्स टेम्पलेट भी है।

शायद इन बगों को ट्रैक करने और उन्हें ठीक करने के लिए यह एक अच्छा विचार है, क्योंकि उद्देश्य सी मेमोरी प्रबंधन जावा की तुलना में काफी अलग है, और इससे पहले कि आप कोशिश कर रहे हैं, छोटी सामग्री के साथ कुछ अभ्यास करना अच्छा है एक समय सीमा के साथ एक बड़ी समस्या डीबग करें।

+1

धन्यवाद! बिल्ड और विश्लेषण एक अच्छी सुविधा है :) – hogni89

+1

+1 बहुत पूरा जवाब :) – jv42

4

बहुत अधिक लाइव मेमोरी उपयोग यह है कि आपके ऐप को क्रैश करने और/या अस्वीकार करने का कारण क्या होगा। यदि आप लूप या दोहराव विधि के अंदर मेमोरी लीक करते हैं, तो लीक अंततः जुड़ जाएंगी, और आपका ऐप क्रैश हो जाएगा।

लेकिन यदि कोई रिसाव है, लेकिन लूप या दोहराने की प्रक्रिया में नहीं है, और कुल राशि एक ऐप के लिए सामान्य स्मृति उपयोग से कम है, तो यह अपूर्ण और सुरुचिपूर्ण हो सकती है, लेकिन वास्तव में यह बताने का कोई तरीका नहीं है, और बहुत कम परिचालन नकारात्मक है।

मैं अक्सर ऐप लॉन्च के दौरान कई मेगाबाइट्स को "लीक" करके जानबूझ कर अपने ऐप्स का परीक्षण करता हूं, और यह सुनिश्चित करता हूं कि ऐप्स अभी भी ठीक चलें। इन ऐप्स में से कुछ ऐप्स को इस लीकिंग टेस्ट कोड के साथ ऐप स्टोर वितरण के लिए अनुमोदित किया गया है, अभी भी गलती से सक्षम है (मिया culpa!)। लेकिन इससे पता चलता है कि कुछ एमबी लीक ऐप अनुमोदन के लिए कोई समस्या नहीं है (जब तक कि कम मेमोरी परीक्षण के दौरान आपके ऐप को क्रैश करने के लिए पर्याप्त नहीं है)।

+2

तनाव परीक्षण के लिए +1। यह अक्सर एक अच्छा विचार है कि विकास में शुरुआती बेकार आवंटन हो, जब समस्याग्रस्त हो जाए तो कुछ स्मृति मुक्त करने का कुछ आसान तरीका हो। यह विशेष रूप से खेल के विकास में उपयोगी है, लेकिन कहीं भी इस्तेमाल किया जा सकता है। – jv42

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