Block_copy
ブロックを配列に格納するときと、ブロックを使い終わったときに、ブロックで関数を使用して、ブロックをヒープに移動することができBlock_release
ます。Block_copy
実行ブロック変数をヒープに移動します。これにより、アプリの実行を続けても変数がスタック メモリで上書きされません。
Block_copy の使用例。最初にブリッジキャストを行う必要があります
そのように、ヘッダーでブロックタイプの typedef を定義します。この型の例には引数がありません。
typedef void (^myBlockType)();
配列にブロックを追加する場合は、次のようにブロックをコピーできます。
- (void)addBlock:(void (^)())aBlock
{
[mutableBlockArray addObject:(__bridge myBlockType)Block_copy((__bridge void *)aBlock)];
}
ブロックの操作が完了したら、次のように解放する必要があります (ARC では必要ありません)。
id finishBlock = [mutableBlockArray objectAtIndex:index]
Block_release((__bridge void *)finishBlock);