12

संभव डुप्लिकेट:
Is literal creation of an NSMutableDictionary less efficient than the class helper method?mutableCopy या arrayWithArray के माध्यम से एक शाब्दिक साथ एक NSMutableArray बनाना:

WWDC वीडियो कि ObjectiveC शाब्दिक परिचय के अनुसार, NSMutableArray रों इसलिए की तरह प्रारंभ किया जा सकता है:

[NSMutableArray arrayWithArray:@[]]; 

लेकिन अगर हम इसे टी की तरह करना चाहते हैं तो क्या होगा उसका:

[@[] mutableCopy]; 

मुझे पता है कि कोई सरणी शुरू कर रहा है, और दूसरा सिर्फ उथली प्रतिलिपि प्रदान कर रहा है; इस प्रकार स्मृति प्रबंधन अलग है। लेकिन अगर हम एआरसी का उपयोग कर रहे हैं, तो उत्तरार्द्ध का उपयोग करने के नुकसान क्या हैं? क्या यह अधिक महंगा है? एआरसी शायद दोनों अलग-अलग संभालता है, लेकिन मैं सोच रहा हूं कि mutableCopy का उपयोग करना 'बदतर' है या नहीं।

+1

'[एनएसएमयूटेबलएरे ऐरे] 'के बारे में क्या? –

उत्तर

5

पूर्व मामले में, आप वर्तमान ऑटोरेलीज पूल में जोड़े गए दो ऑब्जेक्ट्स के साथ समाप्त होते हैं: NSArray शाब्दिक और NSMutableArray जिसे आप इससे बना रहे हैं। उत्तरार्द्ध में, शाब्दिक एनएसएआरएआर को ऑटोरेलीज पूल में जोड़ा जाता है लेकिन इससे एनएसएमयूटेबलएरे कॉपी नहीं किया जाता है। तो पहला मामला थोड़ा खराब, प्रदर्शन-वार है, जिसमें ऑटोरेलीज पूल (उदाहरण के लिए रन-लूप चक्र के अंत में) को निकालने में उत्तराधिकार में दोनों वस्तुओं को जारी करने की आवश्यकता होती है, जबकि दूसरे मामले में प्रति को अलग से रिलीज़ किया जाएगा autoreleased शाब्दिक से। अभ्यास में, समय अंतर infinitesimal होगा।

+0

दिलचस्प! इससे बहुत कुछ पता चलता है। धन्यवाद। – KDaker

+5

एआरसी के तहत, अनियंत्रित ऑटोरेलीज़ अक्सर अनुकूलित किए जाते हैं, इसलिए यह भी संभवतः एक प्रमुख चिंता नहीं है। –

+0

यह आवश्यक नहीं है। पिछली बार मैंने परीक्षण किया, फाउंडेशन को एआरसी के साथ संकलित नहीं किया गया। यह महत्वपूर्ण है, क्योंकि एआरसी के साथ संकलन करते समय, क्लैंग 'रिटर्न [retVal autorelease] नहीं डालता है;' - यह वास्तव में 'वापसी objc_autoreleaseReturnValue (retVal); '। इसी तरह, कॉलर (आपका कोड) परिणाम पर '-retain' को कॉल नहीं करता है, यह 'objc_retainAutoreleasedReturnValue' कहता है। उस विधि के आसपास इन दो कार्यों का संयोजन ऑब्जेक्ट में परिणाम वास्तव में ऑटोरेलीज पूल में प्रवेश नहीं करता है। अन्यथा, यह अभी भी समाप्त होता है। –

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