2012-06-29 16 views
63

संभव डुप्लिकेट:
alloc, init, and new in Objective-Cआईओएस में [कक्षा नई] और [[कक्षा आवंटन] init] के बीच क्या अंतर है?

मैं एक छोटे से [Class new] और [[Class alloc] init] के बारे में उलझन में हूँ। मैंने [Class new] और [[Class alloc] init] का उपयोग कर ऑब्जेक्ट content परिभाषित किया है।

(1). NSMutableArray *content = [NSMutableArray new]; 
(2). NSMutableArray *content = [[NSMutableArray alloc] init]; 

मेरा प्रश्न [Class new] और [[Class alloc] init] के बीच मतभेदों के बारे में है। मेरे लिए, (1) और (2) समान हैं। यदि (1) और (2) समान हैं, तो हम [Class new] की तुलना में अधिकतर समय [[Class alloc] init] का उपयोग क्यों करते हैं? मुझे लगता है कि कुछ अंतर होना चाहिए।

कृपया मतभेदों को समझाएं, पेशेवर & दोनों का विपक्ष?

+1

आप इस लिंक का उल्लेख कर सकते http://macresearch.org/difference साथ चला जाता है -बेटवीन-एलोक-इनिट-एंड-न्यू – janusbalatbat

उत्तर

123

एलोक: एनएसओब्जेक्ट की कक्षा विधि। प्राप्त करने वाले वर्ग का एक नया उदाहरण देता है।

इनिट: एनएसओब्जेक्ट का इंस्टेंस विधि। सबक्लास द्वारा कार्यान्वित किए जाने के तुरंत बाद एक नई वस्तु (रिसीवर) शुरू करने के लिए कार्यान्वित किया गया है।

नया: एनएसओब्जेक्ट की कक्षा विधि। प्राप्तकर्ता वर्ग का एक नया उदाहरण आवंटित करता है, इसे एक init संदेश भेजता है, और प्रारंभिक वस्तु देता है।

रिलीज: एनएसओब्जेक्ट प्रतिनिधि का इंस्टेंस विधि। रिसीवर की संदर्भ संख्या घट जाती है।

Autorelease: NSObject प्रतिनिधि का इंस्टेंस विधि। रिसीवर को वर्तमान ऑटोरेलीज पूल में जोड़ता है।

बनाए रखें: NSObject प्रतिनिधि का इंस्टेंस विधि। रिसीवर की संदर्भ गणना में वृद्धि।

कॉपी: NSObject प्रतिनिधि का इंस्टेंस विधि। एक नया उदाहरण देता है जो रिसीवर की एक प्रति है।

तो समाप्त करने के लिए हम कह सकते हैं कि

alloc init

नई = alloc + init

+1

ग्रेट! वह सहायक था! –

+0

प्रतिनिधियों के पास वास्तव में इसके साथ कुछ करने का अधिकार नहीं है। क्या आपका मतलब 'NSObject' ** प्रोटोकॉल ** है? – dreamlax

9

यहाँ: alloc, init, and new in Objective-C

मूल रूप से यह बनाम पारंपरिक आधुनिक का एक सवाल है। नए पर init का सबसे प्रत्यक्ष लाभ यह है कि कई कस्टम init विधियां हैं।

26

+new विधि +alloc और -init के लिए बस लघुरूप है। स्वामित्व अर्थशास्त्र समान हैं। +new का उपयोग करने का एकमात्र लाभ यह है कि यह अधिक संक्षिप्त है। यदि आपको कक्षा के प्रारंभिककर्ता को तर्क प्रदान करने की आवश्यकता है, तो आपको इसके बजाय +alloc और -initWith... विधियों का उपयोग करना होगा।

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