11

このようなブロックを宣言し^{ DoSomething; }てインスタンス変数に入れる場合、Block_copy()それを維持するのであれば、そうする必要がありますか?

4

1 に答える 1

11

はい、コピーする必要があります。自動リリースされるためではなく、スタックから開始されるためです。ブロックも通常のObjective-Cオブジェクトのように動作するため、通常のcopyメッセージを使用してブロックをコピーできることに注意してください。

void storeBlockForLater: (dispatch_block_t) block
{
    [someArray addObject:[[block copy] autorelease]];
}

または、ブロックプロパティがある場合:

@property(copy) dispatch_block_t block;

ここでは保持は役に立ちません。

于 2011-01-12T10:01:01.623 に答える