2013-04-26 13 views
8
self.myArray = @[ [^{ NSLog(@"a"); } copy], 
        [^{ NSLog(@"b"); } copy]]; 

... üzerine numaralandırılıyor sonra ....Bir dizi blok üzerinde nasıl numaralandırıyorsunuz?

[self.myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    // This syntax is wrong, but I hope you get my intention 
    void (^) (void) block = obj; 
    block(); 
}]; 

nasıl bloğu kovmak mı? (Eğer bir typedef olmadan bunu eğer Bonus)

cevap

0

şudur Muhtemelen bunu yapmanın daha iyi bir yolu.

NSOperation* aOp = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"a");}]; 
NSOperation* bOp = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"b");}]; 

NSOperationQueue* opQueue = [[NSOperationQueue alloc] init]; 
[opQueue setSuspended:YES]; 
[opQueue addOperation:aOp]; 
[opQueue addOperation:bOp]; 

... Sonra

[opQueue setSuspended:NO]; 
10
[self.myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    void (^block)() = obj; 
    block(); 
}]; 

Veya doğrudan argüman listesindeki: art-Divin comment itibaren

[self.myArray enumerateObjectsUsingBlock:^(void (^block)(), NSUInteger idx, BOOL *stop) { 
    block(); 
}]; 
+2

+ 1 argüman listesi değiştiren - Bunu yapabileceğini bilmiyordum! – Robert

+1

, dizideki blokları doğrudan kaydetmek yerine NSOperationQueue ve - [NSOperation operationWithBlock:] öğelerini kullanabilirsiniz. Apple geliştiricileri tarafından tasarlanan bu tam amaç için (yürütme işlemini başlatma/durdurma olanağıyla) bir sınıf varsa, mutlaka bir tane kullanmalısınız. –