构造或组成我自己的块或imps

时间:2012-07-31 19:01:50

标签: objective-c objective-c-blocks imp

问题

objective-c是否有任何类型的功能允许我动态编写自己的块或IMP

我的意思是,让我将任意代码片段链接到一个块中(然后执行imp_implementationWithBlock)或直接汇总IMP

伪代码

(IMP) linkExistingBlock:LBExistingBlock With:^{

}

(IMP) linkExistingBlock:LBExistingBlock With:LBAnotherBlock

2 个答案:

答案 0 :(得分:1)

如果您有两个Block,请调用它们。此外,Blocks是对象,can be put into NSArrays。然后,您可以枚举数组并调用其内容。

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

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

如果你有IMP,那些只是函数指针 - 它们可以被放入一个C数组中,或者包含在NSValue中并放入一个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];
}

答案 1 :(得分:0)

没有内置任何东西,但你可以通过调用它们来创建一个只执行一系列块的块。