0

質問

Objective-cには、自分のブロックやIMPsをその場で作成できるような機能がありますか?

つまり、任意のコードスニペットを1つのブロックにリンクする(そして実行する)か、単純imp_implementationWithBlockにアセンブルするようにします。IMP

擬似コード

(IMP) linkExistingBlock:LBExistingBlock With:^{

}

また

(IMP) linkExistingBlock:LBExistingBlock With:LBAnotherBlock
4

2 に答える 2

1

ブロックが 2 つある場合は、それらを呼び出します。さらに、ブロックはオブジェクトであり、sに入れることができますNSArray。次に、配列を列挙してその内容を呼び出すことができます。

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

また

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

sがある場合IMP、それらは単なる関数ポインタです。それらは 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 に答える