हां, हार्ड-कोडेड NSStrings (स्ट्रिंग शाब्दिक) (जो @"..."
आपके स्रोत कोड में कोई भी हो) को ऐसे तार में बदल दिया जाता है जो आपकी प्रक्रिया के चलने के दौरान अनिश्चित काल तक मौजूद रहते हैं।
हालाँकि NSArray के containsObject:
तरीके isEqual:
इसकी वस्तुओं पर कॉल करते हैं, इसलिए यहां तक कि एक गतिशील रूप से बनाई गई स्ट्रिंग जैसे कि आपके नमूना स्निपेट में [NSString stringWithFormat:@"%d", 2]
वापस आ जाएगीYES
।
ऐसा इसलिए है क्योंकि NSString की isEqual:
(या अधिक सटीक रूप से isEqualToString:
) विधि को जागरूक करने के लिए लागू किया जाता है (बनाम सूचक पहचान की तुलना) और इस प्रकार YES
किसी भी तार के जोड़े के लिए एक ही क्रम के वर्णों की तुलना में (तुलना के समय), कोई फर्क नहीं पड़ता। जब वे बनाए गए थे।
समान (पॉइंटर-) पहचान के लिए जाँच करने के लिए आपको अपने एरे को एन्यूमरेट करना होगा और उसकी तुलना करनी होगी
NSString *yourString = @"foo";
BOOL identicalStringFound = NO;
for (NSString *someString in stringArray) {
if (someString == yourString) {
identicalStringFound = YES;
break;
}
}
(जो आप सबसे अधिक संभावना चाहते हैं, हालांकि) नहीं होगा।
या अधिक सुविधाजनक फैशन में:
BOOL identicalStringFound = [stringArray indexOfObjectIdenticalTo:someString] != NSNotFound;
(आप सबसे अधिक संभावना यह एक भी नहीं चाहते हैं)।
उपसंहार:
कारण तो आप से एक सकारात्मक जवाब हो रही है containsObject:
है नहीं क्योंकि शाब्दिक तार एक ही निरंतर उदाहरण साझा करते हैं, लेकिन क्योंकि containsObject:
सम्मेलन कॉल से isEqual:
, जो सामग्री के बारे में पता है।
आप NSObject प्रोटोकॉलisEqual:
से लघु (लघु) प्रलेखन पढ़ना चाह सकते हैं ।