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

... Później ....Jak wylicza się na tablicy bloków?

[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(); 
}]; 

Jak wyrzucam bloku gdy wyliczanie nad nim? (Bonus jeżeli można to zrobić bez typedef)

Odpowiedz

0

Od komentarzu Art-divin za to prawdopodobnie lepszy sposób robienia tego.

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]; 

... Później

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

lub bezpośrednio na liście argumentów:

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

+ 1 do zmieniania listę argumentów - Nie wiedziałem, że można to zrobić! – Robert

+1

możesz użyć NSOperationQueue i - [Operacja NSOperationWithBlock:] zamiast bezpośrednio zapisywać bloki w tablicy. Jeśli istnieje klasa do tego celu (z możliwością rozpoczęcia/zatrzymania wykonania) zaprojektowaną przez programistów Apple, powinieneś zdecydowanie użyć jednego. –

Powiązane problemy