2012-01-02 11 views
5

में कनवर्ट करने योग्य मूल्य मुझे स्मृति प्रबंधन की मूल बातें पता है, लेकिन आईओएस विभिन्न डेटाटाइप को कैसे संभालता है इसके आंतरिक नहीं। कुछ हमेशा मुझे नाचता है कि NSMutableString के बजाय NSData बनाम NSMutableData या NSString का उपयोग करना सबसे अच्छा है। क्या वास्तव में कोई प्रदर्शन अंतर है जब तक कि कोड 10k लूप में नहीं चल रहा है या क्या मैं अपना समय बर्बाद कर रहा हूं?एनएसएमयूटेबल <T> एनएस <T>

उत्तर

3

म्यूटेबल प्रकारों का उपयोग करें जहां आप सामग्री को स्थानांतरित करने में सक्षम होना चाहते हैं। अन्यथा अपरिवर्तनीय प्रकार का प्रयोग करें।

कुछ मामलों में आपके पास कोई विकल्प नहीं है - जैसे डेटा ऑब्जेक्ट जो NSRLRequest से लौटाया गया डेटा रखता है: एक परिवर्तनीय डेटा ऑब्जेक्ट का उपयोग करना बहुत से अपरिवर्तनीय डेटा प्रकार बनाने और उन्हें शामिल करने से बहुत आसान है अतं मै।

उसके बाद, प्रोफाइलर के माध्यम से अपना कोड चलाएं और देखें कि आपको कुछ अलग करना चाहिए या नहीं। यानी क्या वस्तुओं को पकड़ने के लिए नए अपरिवर्तनीय प्रकार बनाने का उपरिवर्तनीय एक उत्परिवर्तनीय प्रकार का उपयोग करने से अधिक कुशल है। कुछ और समयपूर्व अनुकूलन है।

+0

होना चाहिए, मैं वास्तव में इस बारे में बात कर रहा हूं कि मेरे पास डेटा है कि मैं एक विधि में हेरफेर कर रहा हूं और मैं इसे वापस दूसरे में भेज रहा हूं। – Echilon

+0

@Echilon जैसा कि मैंने कहा है, यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं। यदि आप जिस विधि को डेटा वापस कर रहे हैं उसे संशोधित करने की आवश्यकता है, तो एक म्यूटेबल ऑब्जेक्ट लौटाएं। निजी तौर पर, जब मैं उन्हें चारों ओर गुजर रहा हूं, तो मैं अपने डेटा प्रकारों को अपरिवर्तनीय रखना चाहता हूं। मैं जितना संभव हो सके गुणों के लिए अपरिवर्तनीय प्रकार पसंद करते हैं। चीजों को और अधिक थ्रेड सुरक्षित रखता है, और ऐसे मामलों में जहां differenct स्थानों से मूल्यों को धक्का दिया जा रहा है, यह डीबगिंग को आसान बनाता है। उत्परिवर्तनीय/अपरिवर्तनीय वर्ग समूहों के पास 'प्रतिलिपि' और 'mutableCopy' विधियां हैं जो इसके लिए बहुत आसान हैं। – Abizern

+1

यहां पहली वाक्य कुंजी है: इस बारे में सोचें कि आप डेटा के साथ क्या करना चाहते हैं। यदि इसे उत्परिवर्तनीय होने की आवश्यकता है, तो इसे परिवर्तनीय बनाएं। –

0

जैसा कि आपने कहा कि अगर आप कई बार म्यूटेबल का उपयोग करते हैं तो इसका एकमात्र मूल्य कहा जाता है। लेकिन अगर आप इसे केवल कुछ बार कहते हैं तो यह कोई समस्या नहीं है।

आपको विकल्पों के बारे में सोचना चाहिए, उदा। एक बड़े tableViews cellForRowAtIndexPath: विधि में। का उपयोग करें, *foo = [[NSMutableString alloc] init] और [foo append:firstString] और इसके बजाय।

+0

उदाहरण के रूप में टेबल व्यू कोशिकाओं के कैशिंग और पुन: उपयोग और केवल दृश्यमान कोशिकाओं के प्रतिपादन के कारण अधिक समझ में नहीं आता है। – vikingosegundo

+0

बिलकुल नहीं, अगर आप स्ट्रिंग का निर्माण करते हैं तो मुझे क्या लगता है जिसे एनएसएमयूटेबलस्ट्रिंग के माध्यम से प्रदर्शित किया जाना चाहिए। –

+0

मुझे आपका अंक नहीं मिला। टेबलव्यू प्रति रनलूप केवल एक बार बदल जाता है - इसलिए अक्सर नहीं। – vikingosegundo

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