Posted at

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