日々精進

新しく学んだことを書き留めていきます

エキスパートObjectiveーCプログラミング 3

・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;
};
}
|