2010-10-09 10 views
12

मुझे एनएसएसटींग और एनएसएमयूटेबलस्ट्रिंग के बीच के अंतर के बारे में स्पष्टीकरण की आवश्यकता है। क्या कोई भी संक्षेप में विस्तार कर सकता है?एनएसएसटींग और एनएसएमयूटेबलस्ट्रिंग के बीच क्या अंतर है?

+0

मुझे लगता है कि आप एक अच्छा विचार प्राप्त कर सकते हैं कि वे प्रत्येक पर उपलब्ध विधियों की जांच करके क्या करते हैं। –

उत्तर

9

एक एनएसएसटींग इंस्टेंस को प्रारंभ करने के बाद संशोधित नहीं किया जा सकता है - यह "अपरिवर्तनीय" है। कोई एनएसएसटींग विधियां स्ट्रिंग के मान को संशोधित नहीं कर सकती हैं।

दूसरी ओर एनएसएमयूटेबल स्ट्रिंग को प्रारंभ करने के बाद संशोधित किया जा सकता है।

0

एंडी व्हाइट के उत्तर पर विस्तार करने के लिए, आपके कोड में एनएसएमयूटेबलस्ट्रिंग के बजाय एनएसएसटींग का उपयोग करने के लिए प्रदर्शन लाभ हो सकते हैं (हमेशा के रूप में, यह सुनिश्चित करने के लिए कि यह वास्तव में आपकी प्रदर्शन बाधा है) ऐप्पल के प्रदर्शन टूल का उपयोग करके परीक्षण करें। ऐसी परिस्थिति में जहां आप एनएसएसटींग के मान को बदलना चाहते हैं, एक विकल्प है कि इसमें एक नया एनएसएसटींग बनाया गया है जिसमें इसके बदले गए मूल्य के साथ और फिर पुराने एनएसएसटींग को नष्ट कर दें।

36

मान लीजिए आप इस

NSMutableString *ms = [[NSMutableString alloc] initWithString:@"Hello"]; 

[ms appendString:@"World"]; 
इनमें से

दोनों तरह इस

NSString *s = [[NSString alloc] initWithString:@"Hello"]; 

s = [s stringByAppendingString:@"World"]; 

की तरह एक कोड और अन्य कोड है, कार्यात्मक, एक अंतर के अलावा एक ही बात करते हैं - शीर्ष कोड ब्लॉक रिसाव। - [एनएसएसटींग स्ट्रिंगबैपेंडिंगस्ट्रिंग:] एक नई अपरिवर्तनीय एनएसएसटींग ऑब्जेक्ट उत्पन्न करता है जिसे आप इंगित करने के लिए पॉइंटर को बताते हैं। प्रक्रिया में, हालांकि, आप एनएसएसटींग ऑब्जेक्ट को अनाथ करते हैं जो मूल रूप से इंगित करता है। लाइन रिसाव से छुटकारा देंगी के रूप में बदलना:

s = [[s autorelease] stringByAppendingString:@"World"]; 
+1

क्या यह अभी भी एआरसी ढांचे के साथ एक समस्या है? – sunny

35

अंतर के बीच NSMutableString और NSString है कि

NSMutableString:NSMutableString वस्तुओं अंतर्निहित सरणी को संशोधित करने के तरीकों प्रदान करते हैं वे वर्णों का प्रतिनिधित्व करते हैं, जबकि एनएसएसटींग नहीं है। उदाहरण के लिए, NSMutableString तरीकों को उजागर करता है इस तरह के appendString, deleteCharactersInRange, insertString, replaceOccurencesWithString, आदि इन सभी तरीकों स्ट्रिंग पर काम के रूप में यह स्मृति में मौजूद है के रूप में।

NSString: दूसरी ओर केवल एक बनाने-बार तत्कालीन केवल पढ़ने के लिए स्ट्रिंग अगर आप करेंगे; आप पाएंगे कि इसके सभी "मैनिपुलेशन" विधियों (सबस्ट्रिंग, अपरकेसस्ट्रिंग, आदि) अन्य एनएसएसटींग ऑब्जेक्ट्स लौटाते हैं और वास्तव में स्मृति में मौजूदा स्ट्रिंग को वास्तव में संशोधित नहीं करते हैं।

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