2011-10-14 9 views
12

मैं एआरसी (स्वचालित संदर्भ गिनती) पर स्विच का मूल्यांकन कर रहा हूं और मेरे कोड पर लागू करने के लिए रिफैक्टरिंग का मूल्यांकन कर रहा हूं। बातें मैं यह पता लगाने की है के बीच, यह है:यूवीवी कंट्रोलर की डीआरसीवेव मेमरी चेतावनी एआरसी पर्यावरण में

मैं didReceiveMemoryWarning में क्या करना चाहिए वस्तुओं की स्पष्ट रिहाई एआरसी द्वारा अनुमति नहीं है तो क्या होगा? वर्तमान में, मुझे लगता है कि विधि का उपयोग मेरी नियंत्रक से संबंधित वस्तुओं को रिहा करने और है कि आसानी से आलसी ही टिककर खेल के माध्यम से पुनः प्राप्त करने योग्य हैं:

- (void)didReceiveMemoryWarning { 
    [_foo release]; _foo = nil; 
    [super didReceiveMemoryWarning]; 
} 

और रिश्तेदार आलसी गेटर:

- (Foo *)foo { 
    if (_foo) { 
     return _foo; 
    } 
    return (_foo = [[Foo alloc] init]); 
} 

यह लागू करने के लिए "असंभव लगता है पैटर्न "एआरसी में ... तो, मुझे क्या करना चाहिए? क्या किया जाना चाहिए MemoryWarning एआरसी में "बहिष्कृत"/बेकार माना जाना चाहिए?

उत्तर

20

एआरसी बनाए रखने और कोड जारी करने के लिए संभालता है ताकि _foo को शून्य न हो, एआरसी उत्पन्न कोड को रिलीज करने के लिए अनुमति देने के लिए पर्याप्त है। आप स्पष्ट रूप से रिलीज़ नहीं करते हैं, आप बस अपने ऑब्जेक्ट ग्राफ़ को प्रबंधित करते हैं और एआरसी जेनरेट कोड उचित होने पर रिलीज करेगा।

अधिक जानकारी के लिए ऐप्पल के Transitioning To ARC Release Notes दस्तावेज़ पढ़ें।

0

आप कई चीजें कर सकते हैं, लेकिन सभी ऐप-विशिष्ट हैं। समाशोधन सरणी और शब्दकोशों की तरह चीजें और शून्य के ऑब्जेक्ट संदर्भों को सेट करना (एआरसी वस्तुओं को हटाने का तरीका)।