The "cycle" part does seem to be overlooked when people worry about retain cycles. In your code, the block is managed by GCD, your objects don't own it, so there is no retain cycle.
we've been over using the weakself pattern
It does seem the case that a lot of people think "aargh! Blocks! Make a weakSelf
"!
The retain cycles happen when an object owned by the block (so, a strong reference to the object or one of its ivars) itself owns the block (so the block is copied to a property or ivar).
The typical case is when you've made an object such as a custom alert view that has a completion handler block, and within the block you do something with the object itself (e.g. remove the view from its superview).