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.