शायद कारण यह है कि एनएसएआरएआरई पर ऐसी कोई विधि नहीं है कि अर्थशास्त्र अच्छी तरह परिभाषित नहीं है। आपके मामले के लिए, एक अपरिवर्तनीय NSNumber के साथ, तो सभी अलग-अलग अर्थशास्त्र समकक्ष हैं, लेकिन कल्पना करें कि यदि आप जो वस्तु जोड़ रहे थे वह एक म्यूटेबल ऑब्जेक्ट था, उदाहरण के लिए एनएसएमयूटेबल स्ट्रिंग।
तीन अलग-अलग अर्थ विज्ञान के होते हैं:
बनाए रखने - आप एक ही परिवर्तनशील स्ट्रिंग के लिए दस संकेत को रखना होगा, और किसी भी एक को बदलने में सभी दस बदल जाएगा।
प्रतिलिपि - आप एक ही मूल्य के साथ तार immeduable के लिए एक ही अपरिवर्तनीय स्ट्रिंग के लिए दस संकेत दिए गए, या संभवतः दस अलग संकेत को रखना होगा, लेकिन किसी भी तरह से आप उनमें से किसी को बदलने में सक्षम नहीं होगा ।
mutableCopy - आप दस अलग-अलग परिवर्तनीय स्ट्रिंग ऑब्जेक्ट्स के साथ समाप्त हो जाएंगे, जिनमें से कोई भी आप स्वतंत्र रूप से बदल सकते हैं।
तो एप्पल विधि के तीन वेरिएंट लिख सकता है, या पैरामीटर अर्थ विज्ञान, जो दोनों के बदसूरत हैं नियंत्रित करने के लिए किसी प्रकार का है, तो इसके बजाय वे यह आप के लिए छोड़ दिया कोड लिखने के लिए। यदि आप चाहते हैं, तो आप इसे एनएसएआरएआरई श्रेणी विधि के रूप में जोड़ सकते हैं, बस सुनिश्चित करें कि आप अर्थपूर्ण विकल्पों को समझते हैं और इसे स्पष्ट करते हैं।
विधि:
-(id)initWithArray:(NSArray *)array copyItems:(BOOL)flag
यह एक ही मुद्दा है।
arrayWithObjects का उपयोग करते हुए क्विन का समाधान: गिनती: एक सामान्य रूप से अच्छा है, शायद सामान्य मामले के लिए आप जो भी सर्वश्रेष्ठ प्राप्त कर सकते हैं। इसे एक एनएसएआरएआरई श्रेणी में रखें और यह उतना ही अच्छा होगा जितना इसे प्राप्त होगा।
स्रोत
2009-07-02 03:11:00
अपरिवर्तनीय प्रतिलिपि प्राप्त करने के लिए, बस -copy का उपयोग करें, जो गिनती 1 (और नहीं autoreleased) को बनाए रखने के साथ एक सरणी देता है। –
दरअसल, -कोपी एक अपरिवर्तनीय सरणी देता है जो आपके पास है और उसे रिलीज़/ऑटोरेलीज़ करना चाहिए - बरकरार गिनती कुछ भी हो सकती है कि कितने अन्य समान सरणी हो सकती हैं। बरकरार रखने के बारे में बात करने के लिए यह सबसे अच्छा नहीं है। –
एक उत्कृष्ट भेद - मैं सही खड़ा हूं। आम तौर पर एक प्रतिलिपि एक नव-प्रारंभिक वस्तु देता है जिसे आप अकेले रखते हैं, लेकिन किसी विशिष्ट स्थिति में अर्थशास्त्र अन्यथा निर्देशित कर सकता है। जबकि बनाए रखने की गिनती आम तौर पर 1 होती है, यह * अधिक हो सकती है, और कोई और * इसे ऑटोरेलेज़ कर सकता था। इस प्रकार, आप सही हैं कि केवल अपने स्वयं के कॉल को बनाए रखने/रिलीज़/ऑटोरेलीज़ को संतुलित करने के लिए चिंतित होना सर्वोत्तम है। –