==
पॉइंटर तुलना के कारण काम करता है। जब आप एक निरंतर NSString
उपयोग को परिभाषित करते हैं @""
, तो संकलक संदर्भ को विशिष्ट करता है। जब आपके कोड में समान स्थिरांक अन्य स्थानों पर परिभाषित किए जाते हैं, तो वे सभी स्मृति में एक ही वास्तविक स्थान पर इंगित करेंगे।
NSString
उदाहरणों की तुलना करते समय , आपको isEqualToString:
विधि का उपयोग करना चाहिए :
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
NSLog(@"%d", (myString2 == myString3))
NSLog(@"%d", (myString1 == myString2));
NSLog(@"%d", [myString1 isEqualToString:myString2]);
NSLog(@"%d", [myString1 isEqualToString:myString3]);
[myString3 release];
संपादित करें:
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
// this is same with @"foo"
initWithString:
कोई नया संदर्भ नहीं बनाता है, आपको इसकी आवश्यकता होगी initWithFormat
,
NSString *myString3 = [[NSString alloc] initWithFormat:@"foo"];
myString3
में स्थिरांक"foo"
को एक सूचक बनाएंगे , इसलिए आमतौर पर, इन तीनों चर एक ही मेमोरी स्थान को इंगित करेंगे। यह gcc और clang (डिफ़ॉल्ट विकल्पों के साथ) दोनों के लिए सही है। : इस संकलन का प्रयास करें gist.github.com/578568