चर b
के बाद से पूरी तरह से वर्ग A
करने के लिए आंतरिक है, और (डिफ़ॉल्ट @protected
है) सबसे अच्छा तरीका जानना चाहते हैं कि b
पुनः आवंटित की जाती किया गया है इसे जारी और nil
सूचक स्थापित करने के लिए है @public
के रूप में घोषित नहीं है,। इस तरह, आप केवल if (b == nil)
देख सकते हैं और यदि आवश्यक हो तो एक नया उदाहरण बना सकते हैं।
हालांकि, बड़ा सवाल यह है कि b
की वास्तविक प्रकृति और स्मृति व्यवहार क्या है। आप बताते हैं कि "ऑब्जेक्ट बी को स्मृति कम स्तर में मुक्त किया जा सकता है", लेकिन क्यों नहीं समझाओ। यदि आप उद्देश्य-सी में बनाए रखने के लिए मानक मुहावरे का उपयोग कर रहे हैं, तो मुझे लगता है कि बी यह निर्धारित करने वाला होगा कि बी को हटाया जाना चाहिए, क्योंकि यह एक नया उदाहरण बना रहा है। यदि आप इस तरह के फैसले करने के लिए ए का इरादा नहीं रखते हैं, तो इसे एक नया बी आवंटित करने की इजाजत दी जाएगी जिससे सड़क पर स्वामित्व भ्रम और स्मृति कीड़े हो जाएंगी।
तो एक नहीं बी के आरोप में, और अगर आप तेंदुए पर हैं (या परे) और कचरा संग्रहण सक्षम किया है, एक कमजोर संदर्भ शून्यीकरण को क्या आप चाहते हो सकता है है। यह एक उदाहरण परिवर्तनीय घोषणा से पहले __weak
का उपयोग करके घोषित किया गया है, और कचरा कलेक्टर को उस ऑब्जेक्ट को एकत्रित करने से नहीं रोकता है जो इसे इंगित करता है। (एक "मजबूत" संदर्भ डिफ़ॉल्ट है, और कचरा कलेक्टर ऑब्जेक्ट को डिलीकेट नहीं करेगा, यह रूट से केवल मजबूत संदर्भों के माध्यम से पता लगा सकता है।) आगे, जीसी स्वचालित रूप से 0 के लिए कमजोर संदर्भ सेट कर देगा यदि ऑब्जेक्ट है deallocated।
"बड़े प्रश्न" पर वापस आ रहा है, जब तक b
पहले से ही एक कमजोर संदर्भ नहीं है और जीसी चालू है, (और कुछ अन्य स्थितियां हैं), सिस्टम स्वचालित रूप से आपके लिए बी को निष्क्रिय नहीं करेगा।यदि b
को हटाने का कारण यह है कि बी के समय बी के साथ बढ़ते हैं, (जैसे कि डिस्पेंस करने योग्य वस्तुओं का कैश), तो खाली होने का तरीका बेहतर होगा। उदाहरण के लिए, फाउंडेशन में उत्परिवर्तनीय संग्रह में -removeAllObjects
विधि है। इस तरह का एक दृष्टिकोण इस बारे में भ्रम से बच जाएगा कि b
अभी भी मौजूद है या नहीं, और बार-बार (डी) ऑब्जेक्ट आवंटित करने से कहीं अधिक कुशल है।
स्रोत
2009-06-11 22:07:37
यह इस लेख की तरह लगता है आप दिखाई दे सकते हैं कि यह कैसे करना है: (http://blog.slaunchaman.com/2011/04/11/fun-with- [किसी भी वस्तु का आवंटन रद्द करने पर चलाने के कोड] उद्देश्य-सी-रनटाइम-रन-कोड-एट-डेलोकेशन-ऑफ-ऑब्जेक्ट) – Oscar