ARC, Blocks and Retain Cycles

Assuming progress guarantees, a retain cycle might be exactly what you want. You explicitly break the retain cycle at the end of the block, so it’s not a permanent retain cycle: when the block is called, the cycle is broken.

If you have something else keeping the operation around, though, you can store a reference into either a __weak or __unsafe_unretained variable and then use that from within your block. There’s no need to __block-qualify the variable unless you for some reason need to change the variable’s binding during the block; since you don’t have a retain cycle to break any more, you shouldn’t need to assign anything to the weak variable.

Leave a Comment