・ARC無効の場合にBlockの循環参照を避ける方法
ARC無効の場合、Blockをスタックからヒープにコピーする作業は手動でやる。つまり、Blockはインスタンス変数にする。
typedef int (^blk_t)(int); @implementation MyClass { blk_t block_on_heap; } - (void)method{ id __weak weakSelf = self; blk_t block_on_stack = ^int (int count){ NSLog(@"%p", weakSelf); return 0; }; block_on_heap = [block_on_stack copy]; } @end
ARC無効の場合は__blockを使って循環参照を回避する。
>|objc|- (void)method{
id __block blockSelf = self;
blk_t block_on_stack = ^int (int count){
NSLog(@"%p", blockSelf);
return 0;
};
}
|