SORU
27 NİSAN 2011, ÇARŞAMBA


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
27 NİSAN 2011, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • steeletraining

    steeletraini

    28 NİSAN 2010
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008