チームメンバーの方がメモリ調査をした結果わかったことなのですが、
「block関数内ではデフォルトで強参照してしまう」
です。
これはどういうことかというと、
self.abCallback = ^{
[self amethod];
};
こういう事例でselfがabCallbackを強参照し、abCallbackによってselfが強参照化されてしまうので、
循環参照が起こりメモリが解放されません。
この場合は、
__weak typeof(self) blself = self;
self.abCallback = ^{
[blself amethod];
};
と弱参照にしてやるのがいいようです。
また、これは、ブロックに限らずdelegate等でも起こりがちなので、
常に所有関係を意識するのが大事です。
全然関係ないですが、男女も弱参照ぐらいがちょうどいいと感じています。
強参照で循環参照とか恐ろしすぎて。。。
0 件のコメント:
コメントを投稿