2010-05-11 15 views

उत्तर

4

यदि आप अभी एक वस्तु जारी करते हैं, तो यह मुक्त वस्तु बन जाएगा।

और यदि आप मुक्त ऑब्जेक्ट पर किसी प्रकार का ऑपरेशन करने का प्रयास करते हैं तो आपका ऐप क्रैश हो जाता है। ऐसी दुर्घटनाओं से बचने के लिए, यह हमेशा पसंद किया जाता है "जारी बाद यह शून्य करने के लिए अपने वस्तु आवंटित"। क्योंकि हम सभी जानते हैं कि शून्य पर किए गए किसी भी ऑपरेशन को निष्पादित नहीं किया जाएगा :)

+2

इसके अतिरिक्त: जब आप एक संश्लेषित सेटटर का उपयोग करते हैं, तो आपको पहले रिलीज़ करने की आवश्यकता नहीं होती है और फिर शून्य पर सेट करने की आवश्यकता नहीं होती है। इसे शून्य पर सेट करना भी स्वचालित रूप से जारी किया जाएगा। – Rengers

+0

बस nitpick करने के लिए, यदि आप एक वस्तु यह इच्छा नहीं हो सकता है, मुक्त कर दिया बन जारी ... इतनी बार कुछ कुछ समय के लिए काम करेंगे, लेकिन दुर्घटना रहस्यमय तरीके से बाद में। –

1

ज्यादा नहीं। दूसरा फॉर्म आपको गलती से स्मृति का पुन: उपयोग करने की कोशिश कर रहा है जैसे कि यह अभी भी एक वस्तु है। (के रूप में अगर यह ही वस्तु थी, सटीक होना करने के लिए। स्मृति पता उसके बाद शीघ्र ही एक नई वस्तु के लिए पुन: उपयोग किया जा सकता है।)

1

आप क्योंकि आप रिलीज के बाद, पहले एक साथ सावधान रहना होगा, सूचक अभी भी कुछ कचरा स्मृति को इंगित करता है और इसमें कुछ अन्य वस्तु हो सकती है। तो, पहले एक में, यदि आप कोशिश [myObj रिहाई] तो [myObj DoSomething], आवेदन कुचल सकता है

मेरी सलाह आप हमेशा नहीं के बराबर करने के लिए यह तय करना चाहिए कि आप जारी करने के बाद है।

0

ऑब्जेक्ट पर रिलीज कॉल करते समय संदर्भ-गणना घट जाती है। जब बुला संदर्भ गिनती बनाए रखने वृद्धि की जाती है।

तो जैसा कि लोगों ने बताया कि सूचक अभी भी एक ही स्थान पर इंगित करेगा।

3

यह स्मृति प्रबंधन में एक बड़ी समस्या है। यदि आप किसी संपत्ति का उपयोग कर रहे हैं तो आप रिहाई के उपयोग के बिना शून्य का उपयोग कर सकते हैं। क्योंकि एक संपत्ति के सेटर विधि काम करता है:

- (void)setObjTypes:(NSArray *)ObjTypes { 
    [ObjTypes retain]; 
    [_ObjTypes release]; 
    _ObjTypes = ObjTypes; 
} 

setters पारित कर दिया करने के लिए पारित कर दिया वैरिएबल, पुराने उदाहरण चर के संदर्भ गिनती कम होती है, और फिर सेट उदाहरण चर के संदर्भ संख्या में वृद्धि -इन चर। इस तरह, वस्तु सही ढंग से वस्तु के रूप में लंबे समय के रूप में यह सेट किया गया है उदाहरण चर में संग्रहीत के लिए एक संदर्भ संख्या अधिक है।

सेटटर विधि स्वचालित रूप से रिलीज विधि लागू करती है और फिर इंस्टेंस वैरिएबल का मान शून्य के साथ सेट करती है। लेकिन अगर आप संपत्ति उपयोग नहीं कर रहे तो यह एक बहुत अच्छा अनुभव हम एक सूचक सेट है कि हम जारी first.If सेट करने के लिए नहीं के बराबर सेट करने से पहले शून्य का मतलब करने के लिए यह किसी भी स्मृति पते की ओर संकेत नहीं है, इसलिए यदि हम चाहते हैं कि स्मृति से ऊपर का उपयोग कर पहुँचने का प्रयास है सूचक तो यह दुर्घटनाग्रस्त हो जाएगा। और अगर हम एक आवृत्ति चर पर रिलीज विधि कहते हैं तो यह स्मृति को मुक्त करता है।

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