2011-11-18 12 views
5

उपकरण मुझे एक NSDate चर का रिसाव रिपोर्ट कर रहा है। लेकिन अगर मैं बरकरार रखता हूं और रिलीज़ करता हूं तो यह ऑटोरेलीज पूल द्वारा मुझे लगता है कि रिलीज करने में सक्षम होना चाहिए। शायद मैं गलत गिन रहा हूं लेकिन मुझे यकीन नहीं करना पड़ेगा। रेफसीट पर एक नज़र डालें। यदि मैं [कक्षा आवंटन] इसे 1 की बरकरार गिनती के साथ आना चाहिए, तो अगर मैं उस ऑब्जेक्ट को स्वतः स्वामित्व देता हूं, तो यह मुक्त हो सकता है, या नहीं?उपकरण में लीक, संदर्भ गणना और Autorelease

enter image description here

उत्तर

6

उपकरण को बरकरार रखे हुए है और आप के लिए विज्ञप्ति कहते हैं। यही है कि "रेफसीटी" कॉलम आपको दिखाता है: कुल रनिंग।

अगर मैं [क्लास alloc] 1 की गिनती को बनाए रखने के साथ आने चाहिए, ...

और वास्तव में यह करता है; सूची में यह पहली पंक्ति है।

... तो अगर मैं उस ऑब्जेक्ट को स्वतः स्वामित्व देता हूं, तो यह मुक्त हो सकता है, या नहीं?

Autorelease तत्काल -1 नहीं है; यह बाद में रिलीज का कारण बनता है, और है जो -1 है।

तो तुम हो:

  1. आवंटन: +1 (= 1)
  2. autorelease: 0 अब के लिए; का कारण बनता है एक रिलीज बाद में (कोई परिवर्तन नहीं अब, इसलिए अभी भी = 1)
  3. बनाए रखें: +1 (= 2)
  4. रिलीज: -1 (= 1)
  5. बनाए रखें: +1 (= 2)
  6. बनाए रखें: +1 (= 3)
  7. रिलीज: -1 (= 2)
  8. रिलीज: -1 (= 1)

ध्यान दें कि तीन विज्ञप्ति में से एक autorelease की वजह से एक है । केवल तभी -1 होता है।

ऑब्जेक्ट को हटाए जाने के लिए ऑब्जेक्ट को एक और रिलीज की आवश्यकता है। ऐसा होने तक, यह नहीं होगा।

और हां, किसी ऑब्जेक्ट के लिए यह संभव है कि उसमें मारने के लिए पर्याप्त उत्कृष्ट ऑटोरेलीज़ हों, जब ऐसा होने से पहले बनाए रखा जाए और इस प्रकार जीवित रखा जाए। मैंने देखा कि यह एक वस्तु के साथ एक बार होता है जिसे मैं बरकरार रखता था, लेकिन वह बाध्यकारी द्वारा उपयोग की जाने वाली संपत्ति का मूल्य था; बाध्यकारी ने मूल्य को बरकरार रखा और इसलिए मैंने इसे अपने स्वयं के आखिरी स्वामित्व को स्वत: समाप्त करने के बाद भी जीवित रखा।

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