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なしで実行できる場合のボーナス)

4

3 に答える 3

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

または引数リストで直接:

[self.myArray enumerateObjectsUsingBlock:^(void (^block)(), NSUInteger idx, BOOL *stop) {
    block();
}];
于 2013-04-26T13:24:25.183 に答える
1

これはうまくいくはずです:

void (^block )(void) = obj;
于 2013-04-26T13:24:25.017 に答える
0

art-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];
于 2013-04-28T14:13:33.043 に答える