मैं एक व्यापक जावा पृष्ठभूमि के साथ एक आईफोन/उद्देश्य-सी नौसिखिया हूं।एनएसएमयूटेबलएरे ऐरेविथ कैपेसिटी बनाम initWithCapacity
मैं में ऑब्जेक्टिव-सी स्मृति प्रबंधन के बारे में अधिक सीख रहा हूँ और मैं मेमोरी मैनेजमेंट पर एप्पल के प्रलेखन पढ़ रहा हूँ: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
वस्तु स्वामित्व नीति खंड में, यह कहता है कि आप आप एक के माध्यम से बनाए गए किसी भी वस्तु के मालिक हैं विधि जो आवंटन से शुरू होती है, नई या प्रतिलिपि होती है। स्वामित्व का तात्पर्य यह है कि जब आप इसके साथ काम करते हैं तो आपको स्पष्ट रूप से release
ऑब्जेक्ट की आवश्यकता होती है।
तो मैं NSMutableArray प्रलेखन पर देख रहा हूँ: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html
दो तरीकों कि काफी एक ही बात कर रहे हैं ... वे दोनों कुछ आरंभिक क्षमता के साथ एक सरणी पैदा करते हैं। एक वर्ग विधि है और दूसरा एक उदाहरण विधि है।
+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;
अब, आलसी जावा डेवलपर मैं कर रहा हूँ जा रहा है यही कारण है कि मैं कभी भी वर्ग विधि कुछ बिंदु पर जानते हुए भी कि समय मैं अपने आप को करने के बाद साफ करने के लिए है में से अधिक उदाहरण विधि का चयन होगा?
मुझे लगता है कि मुझे यहां एक मौलिक बिंदु याद आ रहा है ... क्या यह निर्धारित करने का मामला है जब ऑब्जेक्ट जारी किया जाता है? उदाहरण विधि में autorelease
वर्ग विधि बनाम release
में? मुझे लगता है कि बहुत सीमित संसाधनों (आईफोन) वाले प्लेटफॉर्म पर मुझे कक्षा विधि का उपयोग करने से रोकना चाहिए और जैसे ही मैं इसके साथ काम कर रहा हूं, वस्तु को छोड़ देना चाहिए?
धन्यवाद!
क्या यह अब सत्य है कि हमारे पास स्वचालित संदर्भ गिनती है? ऐसा लगता है कि दो विधियों को अब काफी समान होना चाहिए क्योंकि एआरसी कोड मूल रूप से आवंटित/init निर्मित ऑब्जेक्ट में एक अंतर्निहित autorelease लागू होता है। यह देखेगा कि ज्यादातर मामलों में हमें सुविधा विधियों का उपयोग करना चाहिए यदि यह सादगी और स्पष्टता के लिए मौजूद है क्योंकि कोई भी प्रदर्शन दंड नहीं है, अगर मैं इसे सही ढंग से समझता हूं। – Mike