iphone - iOS4-तेज़ संदर्भ स्विचिंग




context-switching (2)

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

लेकिन मेरे ऐप में, मैं नेविगेशन नियंत्रक का उपयोग करके पुश करने और दृश्य पॉप कर रहा हूं। लगभग 20 अलग-अलग पृष्ठों से जाने के बाद, गंदे स्मृति उपयोग 30 एमबी या उससे अधिक तक पहुंचता है।

इसके अलावा "डिसप्लेड मॉडेल विज नियंत्रकअनिमित" और "पॉपव्यूकंट्रोलरअनिमीटेड" पर, डेलोक को नहीं कहा जाता है।

मेरे दो संदेह हैं:

  1. कितना गंदे स्मृति जीने के लिए स्वीकार्य है?
  2. वापस बटन का समर्थन करने के लिए नेविगेशन नियंत्रक के वैकल्पिक क्या हैं?

अग्रिम में धन्यवाद।


  1. जब कोई आईओएस स्मृति से बाहर चलना शुरू करता है तो वह पृष्ठभूमि प्रक्रियाओं को मारने की कोशिश करता है जो सबसे मेमोरी का उपयोग कर रहे हैं। इसलिए जब कोई पूर्ण संख्या नहीं है, तो कम से कम आपके द्वारा उपयोग की जाने वाली मेमोरी एक अच्छा विचार है इसे 30 एमबी में छोड़कर यह सुनिश्चित करने के लिए बराबर है कि आपके ऐप को मार दिया जाएगा
  2. जब तक आप अपना यूआई बदलना नहीं चाहते हैं, तब तक कुछ भी उपयोग करने की कोई आवश्यकता नहीं है, जो आपके बैक बटन से निपटने के लिए एक UINavigationController है। मुझे लगता है कि यहाँ समस्या यह है कि यदि dealloc किसी पॉप पर नहीं बुलाया जाता है या खारिज होता है, तो आपके पास स्मृति रिसाव होता है

लगभग सभी दृश्य नियंत्रकों में डेटा है जो प्रभावी ढंग से कैश किया गया है और फिर से पुन: उत्पन्न किया जा सकता है जब ऐप वापस अग्रभूमि पर देता है उस ऐप के बारे में सोचें जो आप जारी करते हैं जब आपको ऐप चलने पर मेमोरी चेतावनी मिलती है। (आप मेमोरी चेतावनियों का जवाब दे रहे हैं, है ना?) यह वह चीज है जिसे आप पृष्ठभूमि में जाने पर रिहा किया जाना चाहिए।


यदि आपके पास अभी भी डेविल को फोन नहीं किया जा रहा हो, तो अभी भी आपके UIViewControllers को बनाए रखा जा सकता है

शायद आप इन UIViewControllers में प्रतिनिधियों या अन्य वर्गों को स्थापित कर रहे हैं जो वृक्ष (परिपत्र संदर्भ) को बनाए रखा और संदर्भित किया है।

जिस तरह से आप इसे डिबग कर सकते हैं, उसे ओवरलोड रखने और अपने UIViewController में रिलीज करने के लिए और एक ब्रेक पॉइंट सेट करें और बनाए रखने के लिए गणना करें।

यहां एक मैजिक स्पीपेट है जो मुझे चारों ओर चलना छोड़ देता है जिससे मुझे एक टन की मदद मिलती है जब मुझे समझ में नहीं आता कि मैं अभी कुछ क्यों रख रहा हूं।

- (id)retain
{
    NSLog(@"retain \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    return [super retain];
}
- (void)release
{
    NSLog(@"release \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    [super release];
}
- (id)autorelease
{
    NSLog(@"autorelease \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    return [super autorelease];
}

__PRETTY_FUNCTION__ में एक विशेष छिपे हुए मैक्रो है जो कि चार सरणी के रूप में एक सुंदर उद्देश्य-सी फ़ंक्शन नाम देता है।