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

...後來....你如何列舉一系列塊?

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

你如何枚舉了它,當施展出塊? (獎金,如果你能做到這一點沒有一個typedef)

回答

0

從藝術Divin住宿的評論,這是可能是更好的做法。

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

......後來

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

或直接在參數列表:

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

+ 1的改變參數列表 - 我不知道你能做到這一點! – Robert 2013-04-26 13:27:48

+1

你可以使用NSOperationQueue和 - [NSOperation operationWithBlock:],而不是直接在數組中保存塊。如果爲了這個準確的目的(有可能開始/停止執行)有一個類,由Apple開發人員設計,那麼你肯定應該使用一個類。 – 2013-04-26 15:19:51