0

问题

Objective-c 是否有任何功能可以让我IMP即时组合自己的块或 s?

我的意思是让我将任意代码片段链接到一个块中(然后执行imp_implementationWithBlock),或者直接组装IMP起来。

伪代码

(IMP) linkExistingBlock:LBExistingBlock With:^{

}

或者

(IMP) linkExistingBlock:LBExistingBlock With:LBAnotherBlock
4

2 回答 2

1

如果您有两个块,只需调用它们。此外,块是对象,可以放入NSArrays中。然后你可以枚举数组并调用它的内容。

for( dispatch_block_t block in arrayOfBlocks ){
    block();
}

或者

[arrayOfBlocks enumerateObjectsUsingBlock:^(dispatch_block_t block, NSUInteger idx, BOOL *stop) {
        block();
}];

如果你有IMPs,那么它们只是函数指针——它们可以放入 C 数组中,或者包装在NSValues 中并放入 Cocoa 数组中。您只需要在尝试调用它们之前投射它们。

对于您的示例方法签名:

- (dispatch_block_t)blockLinkingExistingBlock: (dispatch_block_t)firstBlock withBlock: (dispatch_block_t)secondBlock
{
    dispatch_block_t linker = ^{ firstBlock(); secondBlock();};
    // if compiling with ARC
    return linker;
    // otherwise
    // return [[linker copy] autorelease];
}
于 2012-07-31T19:29:07.113 回答
0

没有内置任何内容,但您可以创建一个块,通过调用它们来简单地执行一系列块。

于 2012-07-31T19:12:29.613 回答