block会持有外部变量,不会持有局部变量。嵌套block中的第一层block的局部变量对于内部block来说就是外部变量。
所以下面例子这哪个blockB中用self的话还需要再strongify一次,否则blockB还是会持有blockA中的局部变量self,还是会造成循环引用。
@weakify(self);
self.blockA = ^{
@strongify(self);
self.blockB = ^{
@strongify(self);
[self doSomething];
}
}