讓人蛋疼的block!
block對於其變量都會形成strong reference,對於self也會形成strong reference ,而如果self本身對block也是 strong reference 的話,就會形成 strong reference 循環,造成內存泄露,爲了防止這種情況發生,在block外部應該創建一個week(__block) reference。
所以在block內如果有self的話,一般都會在block外面加一句_block typeof(self)bself = self;
__block typeof(self) bself = self;
[self methodThatTakesABlock:^ {
[bself doSomething];
}
一定要防止在block中用到self時把self對象retain, 造成內存泄露。