代码之家  ›  专栏  ›  技术社区  ›  Andrew Lauer Barinov

构建或组成我自己的区块或imps

  •  0
  • Andrew Lauer Barinov  · 技术社区  · 13 年前

    问题

    objective-c是否具有任何类型的功能,允许我编写自己的块或 IMP 他在飞行吗?

    我的意思是,让我将任意代码片段链接到一个块中(然后执行 imp_implementationWithBlock )或者只是组装 接口信息处理器

    伪代码

    (IMP) linkExistingBlock:LBExistingBlock With:^{
    
    }
    

    (IMP) linkExistingBlock:LBExistingBlock With:LBAnotherBlock
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    如果你有两个方块,就叫它们。此外,块是对象,并且 can be put into NSArray s 。然后您可以枚举数组并调用其内容。

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

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

    如果你有 IMP s、 这些只是函数指针——它们可以放入C数组中,也可以封装在 NSValue s并放入可可数组中。你只需要先铸造它们,然后再尝试调用它们。

    对于您的示例方法签名:

    - (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];
    }
    
        2
  •  0
  •   Jim os x nerd    13 年前

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

    推荐文章