यह उन वस्तुओं के लिए सामान्य है जिनके पास कुछ राज्य हैउस संसाधन के साथ स्पष्ट रूप से "परिष्करण" के लिए एक विधि प्रदान करने के लिए एक गैर-स्मृति संसाधन से संबंधित। क्या इस मामले से निपटने के लिए एक पसंदीदा सामान्य अभ्यास है जहां "मेरे संसाधन का उपयोग" स्थिति में अभी भी ऑब्जेक्ट डिलीओशन का प्रयास किया जाता है? मैंने कुछ अलग दृष्टिकोण देखा है:
- लॉग इन करें कि प्रोग्रामर ने गलती की है और उन्हें बताएं कि इसे कैसे डिबग करना है (
NSLock
क्या वो) - कॉलर को यह चुनने दें कि संसाधन कॉलर द्वारा प्रबंधित किया गया है या डीलोकेशन पर छोड़ दिया गया है (उदा।
NSFileHandle
) - यदि ऑब्जेक्ट अपेक्षित अंतिम स्थिति में नहीं है, तो अपवाद बढ़ाएं, यानी यह कहें कि प्रोग्रामर इस तरह से मेरी ऑब्जेक्ट का उपयोग नहीं करेगा
- हमेशा रास्ते पर साफ करें।
The GC डॉक्स पुष्टि करें कि स्मृति प्रबंधन के साथ अंय संसाधनों के प्रबंधन एक बुरा विचार है और (अभी तक) 4 कर का एक उदाहरण प्रदान करते हैं, हालांकि निरंतर के साथ ।तो किसी "चुना" एक दृष्टिकोण को हमेशा का पालन किया है?
उत्तर:
उत्तर № 1 के लिए 1के बाद से कोको फ्रेमवर्क वस्तुओं की सबसे तारीख कचरा संग्रह, आप कर सकते है "टी इस धारणा है कि NSFileHandle, उदाहरण के लिए, यह सबसे अच्छा तरीका कर रही है ।मुझे लगता है कि यह समस्या कई में से एक है जहां हम "डी के लिए एक पैटर्न के लिए हर परिदृश्य के लिए पालन करें और हमें बचाने के लिए एक विकल्प बनाने की मुसीबत की तरह है ।दुर्भाग्य से, मैं डॉन ' टी लगता है कि "संभव एस; आप "करने के लिए निर्धारित क्या" एक मामले पर सबसे अच्छा s-मामले के आधार पर जा री ।
यहां अपने विकल्पों में से किसी का चयन करने के लिए कारण हैं:
- यदि स्वचालित सफाई यथोचित सुरक्षित है, लेकिन कार्यक्रम वास्तव में यह मैंयुअल रूप से करना चाहिए ।
- यदि आप "एक लायब्रेरी और संसाधन लिख पुन: हो सकता है या आपके ऑब्जेक्ट के स्वामित्व में नहीं है ।
- यदि स्वचालित क्लीनअप संभव नहीं है या किसी तरह जोखिम भरा है ।
- यदि स्वचालित सफाई और तुच्छ है किसी को परेशान करने के लायक नहीं है यह मैंयुअल रूप से करते हैं ।