objective c - What is the difference between these two ways of creating NSStrings? -


  1. NSString * myString = @ "हैलो";

  2. NSString * myString = [NSString stringWithString: @ "हैलो"];

मैं समझता हूं कि विधि (1) एक स्ट्रिंग के लिए एक संकेतक बनाता है जिसे स्थैतिक मेमोरी के रूप में परिभाषित किया जाता है (और इसे वितरित नहीं किया जा सकता है) और जो कि (2) एक एनएसएसटीइंग ऑब्जेक्ट बनाता है जो ऑटोरेलेज़ हो जाएगा।

  • विधि (1) बुरे?
  • प्रमुख अंतर क्या हैं?
  • क्या कोई ऐसा उदाहरण है जहां आप उपयोग करना चाहते हैं (1)?
  • क्या कोई प्रदर्शन अंतर है?

पीएस मैंने स्टैक ओवरफ्लो पर बड़े पैमाने पर खोज की है और जब एक ही विषय पर प्रश्न हैं, तो उनमें से कोई भी मेरे ऊपर दिए गए सवालों के उत्तर नहीं देता है।

जैसा कि स्ट्रिंग लीटरल में बताया गया है कि अपरिवर्तनीय स्ट्रिंग ऑब्जेक्ट्स और संकलित समय में उनका पता प्राप्त करें - इसलिए आपको रन-टाइम के दौरान एक ही शाब्दिक स्ट्रिंग के कई उदाहरण बनाने की आवश्यकता नहीं है।

<पूर्व> NSString * myString = @ "हैलो";

तो यहाँ हम सिर्फ स्ट्रिंग को स्ट्रिंग के लिए स्ट्रिंग को स्ट्रिंग देते हैं I

<पूर्व> NSString * myString = [NSString stringWithString: @ "हैलो"]; दूसरी लाइन सुविधा निर्माता का उपयोग करते हुए ऑब्जेक्ट बनाता है, लेकिन जैसा कि हम अपरिवर्तनीय ऑब्जेक्ट्स के साथ काम कर रहे हैं, इसका परिणाम एक ही पॉइंटर वैल्यू को स्ट्रिंग के लिए होता है - तो आपको उसी परिणाम को 1 जैसा मिलता है। संस्करण (हालांकि शायद कुछ अतिरिक्त विधि कॉल कर रहे हैं)।

ऐसा लगता है कि आपके द्वारा उल्लिखित वेरिएंट समान हैं, लेकिन दूसरा कोई भी अतिरिक्त कॉल भी कर सकता है।

छोटा नमूना जो दर्शाता है होता है:

  NSString * tString = @ "lala"; NSString * tString2 = @ "लाला"; NSString * tString3 = [NSString स्ट्रिंग WithString: @ "लाला"]; NSString * tString4 = [NSString stringWithFormat: @ "% @", @ "लाला"]; NSLog (@ "% p% d", tString, [tString को बनाए रखने की संख्या]); NSLog (@ "% p% d", tString2, [tString2 बनाए रखने की गणना]); NSLog (@ "% p% d", tString3, [tString3 को बनाए रखने की गणना]); NSLog (@ "% p% d", tString4, [tString4 retainCount]);  

आउटपुट:

  0xd0418 2147483647 0xd0418 2147483647 0xd0418 2147483647 0x50280e0 1  

Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -