2014年6月26日木曜日

iPhoneアプリのメモリ管理のお話し。(ARC使用)

チームメンバーの方がメモリ調査をした結果わかったことなのですが、

「block関数内ではデフォルトで強参照してしまう」

です。

これはどういうことかというと、

self.abCallback = ^{
  [self amethod];
};

こういう事例でselfがabCallbackを強参照し、abCallbackによってselfが強参照化されてしまうので、
循環参照が起こりメモリが解放されません。

この場合は、

__weak typeof(self) blself = self;
self.abCallback = ^{
  [blself amethod];
};

と弱参照にしてやるのがいいようです。

また、これは、ブロックに限らずdelegate等でも起こりがちなので、
常に所有関係を意識するのが大事です。



全然関係ないですが、男女も弱参照ぐらいがちょうどいいと感じています。
強参照で循環参照とか恐ろしすぎて。。。

0 件のコメント:

コメントを投稿