_weakIvar
действительно означает self->_weakIvar
под капотом, что означает, что (автоматически) сохраняется self
. То же самое относится и к self.weakProperty
.
В вашем конкретном примере блок не копируется (и используется сразу), поэтому ничего не сохраняется вообще, но если вы делаете (например):
- (void) foo {
void (^block)() = ^{
[_weakIvar doSomethingAwesomeButNotTooAwesome];
}
dispatch_async(queue, block); // here, block is copied and so self is retained
}