ARC, ivars in Blocks and Reference Cycles via Captured Self ARC, ivars in Blocks and Reference Cycles via Captured Self ios ios

ARC, ivars in Blocks and Reference Cycles via Captured Self


There is only a cycle here if self then goes on to hold a reference to the block (or something owned by self). If not you're good to go as the lifetime of the block is not dictated by the self it retained.

So in your particular example, you seem to be in the clear. Animation blocks don't need to participate in the weak/strong self dance.


The case to worry about is something like addObserverForName:object:queue:usingBlock:. The docs say, "The block is copied by the notification center." Under ARC, that word "copy" is a red flag; now you need to take steps so that you (the caller) will not leak.

EDIT: Also, sometimes ARC itself will alert you. The completion block of -[UIPageViewController setViewControllers:direction:animated:completion:] is a case in point. I would never have suspected that using self here might cause a retain cycle, but ARC warned that it would, so I did the weak-strong dance just in case.