SORU
10 EYLÜL 2012, PAZARTESİ


Ne enumerateObjectsUsingBlock için BOOL *dur argüman: için kullanılır?

enumerateObjectsUsingBlock: son zamanlarda çok hızlı numaralandırma ihtiyaçlarım için kullanıyorum, ve sabit bir zaman numaralandırma bloğu BOOL *stop kullanımı anlamakta güçlük çekiyorum.

NSArray sınıf başvuru Devletleri

stop: Boolean bir değer Bir başvuru. Blok YES değerini ayarlamak için kullanılır dizinin işlenmesi dur. stop argüman-sadece bir bağımsız değişken. Sadece içinde YES Bu Boolean ayarlamak gerekir Blok.

O zaman tabii ki benim bloğu aşağıdaki numaralandırma durdurmak için ekleyebilirsiniz:

if (idx == [myArray indexOfObject:[myArray lastObject]]) {
    *stop = YES;
}

Söylemek mümkün oldum ne, açıkça YES 12 *ayarı herhangi bir olumsuz yan etkileri yok. Numaralandırma otomatik olarak dizinin sonunda kendisini durdurmak gibi görünüyor. Yani *stop kullanarak gerçekten bir blok içinde gerekli mi?

CEVAP
10 EYLÜL 2012, PAZARTESİ


Blok stop bağımsız değişken numaralandırma durdurmak için izin verirzamanından önce. for normal bir döngü break denk geliyor. Eğer dizideki her nesne ile gitmek isterseniz yok sayabilirsiniz.

for( id obj in arr ){
    if( [obj isContagious] ){
        break;    // Stop enumerating
    }

    if( ![obj isKindOfClass:[Perefrigia class]] ){
        continue;    // Skip this object
    }

    [obj immanetizeTheEschaton];
}

[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if( [obj isContagious] ){
        *stop = YES;    // Stop enumerating
        return;
    }

    if( ![obj isKindOfClass:[Perefrigia class]] ){
        return;    // Skip this object
    }

    [obj immanentizeTheEschaton];
}];

Bu Blok içinde set olmalı çünkü bir parametredir, ancak okuma enumerateObjectsUsingBlock:, NSError yaygın olarak kodunuzu geri geçirilir aynı şekilde çerçeve çağrıları içinde.

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block {
    // N.B: This is probably not how this method is actually implemented!
    // It is just to demonstrate how the out parameter operates!

    NSUInteger idx = 0;
    for( id obj in self ){

        BOOL stop = NO;

        block(obj, idx  , &stop);

        if( stop ){
            break;
        }
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • Ryan Billy

    Ryan Billy

    30 EKİM 2006
  • SDSARG3

    SDSARG3

    14 Mart 2009