Kontrol örneği NSArray içeriyorsa NSString
Dizeleri bir grup ile bir dizi var ve eğer belirli bir dize dizisi içinde yer alan olup olmadığını kontrol etmek istiyorum. containsObject kullanırsam: dizi mesaj, doğru sonuçlar alıyorum. Aynı dize aynı nesneye işaret NSString tüm nesneler? Ya da neden containsObject: çalışıyor mu?
NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherStringValue, nil];
if([stringArray containsObject:@"2"]){
//DO SOMETHING
}
CEVAP
Evet, kodlu sabit NSStrings (dize hazır) (@"..." kaynak kod) işlemi çalışırken, sonsuza kadar var olan dizeleri dönüştü.
AncakNSArray'containsObject: s yöntemleri nesneleri isEqual:, dolayısıyla çağırırhatta bir dinamik olarak oluşturulan dize[NSString stringWithFormat:@"%d", 2] gibiYES dönecektiörnek bir göz atın.
Bu isEqual: (daha doğrusu isEqualToString:) yöntem NSString için uygulanan olmasıdırfarkında (karşılaştırma işaretçi kimlikler vs) içeriğive böylece döner dizeleri yaratıldıkları nasıl olursa olsun karakter aynı sıra (karşılaştırma) içeren herhangi bir çift için YES.
Eşit (işaretçi)kimlik kontrol dizi sıralamak lazım ve ile karşılaştırın
NSString *yourString = @"foo";
BOOL identicalStringFound = NO;
for (NSString *someString in stringArray) {
if (someString == yourString) {
identicalStringFound = YES;
break;
}
}
büyük olasılıkla, yine de istemem.
Ya da daha uygun bir moda
BOOL identicalStringFound = [stringArray indexOfObjectIdenticalTo:someString] != NSNotFound;
(büyük olasılıkla bu da) olmaz.
Özetle:
Olumlu bir cevap alma nedeni containsObject:DEĞİLharflerden oluşan dizeler aynı sabit örneği paylaşır çünküAMAkongre tarafından containsObject: çünkü aramalar içerik farkında olan isEqual:,.
NSObject protocol isEqual: (kısa) belgeleri okumak isteyebilirsiniz.

Eğer bir dizi değeri içeriyorsa, kontr...
Nasıl dize karakter ve boşluk içeriyor...
Nasıl bir dize Objective-C başka bir d...
Nasıl bir sözcüğü bir dize PHP kullana...
Nasıl eğer URL bir dize içeriyorsa kon...