2010-11-02 12 views
5

जब मैं अस्थायी उपयोग के लिए एक सरणी की जरूरत है, क्या इन के बीच का अंतर है:autorelease बनाम जारी

1:

NSMutableArray *stuff = [[NSMutableArray alloc] init]; 
// use the array 
[stuff release]; 

2:

NSMutableArray *stuff = [NSMutableArray array]; 
// use the array 

3:

NSMutableArray *stuff = [[[NSMutableArray alloc] init] autorelease]; 
// use the array 

मैं संख्या 2 पसंद करता हूं, क्योंकि यह छोटा है। क्या नंबर 1 या 3 का उपयोग करने के कोई अच्छे कारण हैं?

उत्तर

10

संख्या 2 ज्यादातर मामलों में सबसे अच्छा विकल्प है।

नंबर 1 को किसी भी कारण से लाइन के नीचे किसी बिंदु पर रिलीज खोने का मौका मिला है, लेकिन यह तुरंत को रिलीज़ करता है, जो स्मृति-भूखे वातावरण में उपयोगी हो सकता है।

संख्या 3 मूल रूप से संख्या 2 के बराबर वर्बोज़ है, लेकिन यदि आप एक initWith * का उपयोग करना चाहते हैं तो यह आसान हो जाता है * जिसमें एक समान सरणी नहीं है *।

नोट: आप हैं स्मृति-भूखे इस तरह के एक महंगी पाश जहाँ आप प्रत्येक यात्रा के लिए एक ताजा सरणी की जरूरत के रूप में,; जारी नहीं करें और नए सरणी आवंटित करें; बस -removeAllObjects का उपयोग करें और सरणी को रीसायकल करें।

+0

धन्यवाद! संख्या 1 में स्मृति की तत्काल रिलीज के बारे में अच्छा बिंदु 1. – keronsen

+2

आईफोन पर, आप पाएंगे कि अधिकांश लोग नंबर 1 का उपयोग करते हैं क्योंकि स्मृति को जल्द ही रनटाइम पर दिया जाता है। वास्तव में, ऐप्पल जितना संभव हो सके ऑटोमोली से बचने की सलाह देता है (आईफोन पर)। – JeremyP

+1

अच्छा जवाब, अंतिम बिट के लिए सहेजें। मैं दांव दूंगा कि प्रत्येक पास एक नई सरणी बनाने और सभी वस्तुओं को हटाने के बीच अंतर अतुलनीय है और, संभवतः, सभी वस्तुओं को हटाने से थोड़ा धीमा हो जाएगा। किसी भी मामले में, जब तक आपके पास मात्रात्मक प्रदर्शन समस्या न हो तब तक अनुकूलित न करें। – bbum

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