Kontrol örneği NSArray içeriyorsa NSString | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • PlayStation

    PlayStation

    16 Aralık 2005