block對于其變量都會形成strong reference,對于self也會形成strong reference ,而如果self本身對block也是 strong reference 的話,就會形成 strong reference 循環(huán),造成內(nèi)存泄露,為了防止這種情況發(fā)生,在block外部應(yīng)該創(chuàng)建一個week(__block) reference。
所以在block內(nèi)如果有self的話,一般都會在block外面加一句_block typeof(self)bself = self;
__block typeof(self) bself = self;
[self methodThatTakesABlock:^ {
[bself doSomething];
}