Objective-C
ARC

Avoid cycle retain in ARC environment

More than 5 years have passed since last update.

ARC無し

block 内からの参照は自動的に retain される。 __block 指定の変数は retain されない。

__block typeof(self) bself = self;
b = ^{
    bself.prop = YES;
    int foo = bself->ivar;
};

ARC有り

__block は効かないので注意。
また型の指定に typeof(self) も使えない。

__weak TypeA *wself = self;
b = ^{
    wself.prop = YES;
    int foo = wself->ivar;
};

http://stackoverflow.com/questions/8915981/block-self-reference-cycle-in-ivar-block-in-arc