忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

Blocksの循環参照には気をつけましょう

わか

iOSにおいて、Blocks構文はdegegateの代わりによく使いますが、循環参照しているとメモリリークしてしまいます。先日メモりリークしていたので、備忘録を記載します。

Blocks構文内では以下のことを気をつける。
・selfをそのまま使用しない。__weakを使用する
・グルーバル変数をそのまま使用しない。__blockを使用する

循環参照は有名なので詳細は省きますが、今回はまったのはグローバル変数の使用でした。
viewControllerで定義したグローバル変数をBlocks構文内で使用しました。
するとそのviewControllerを閉じた際にdealockが呼ばれない状況が発生しました。
どうやらグルーバル変数をそのまま使用すると参照が残るようでしたので、__blockを定義した別変数にコピーしてから使用するとdealockが呼ばれるようになりました。

循環参照を完全に把握できていないので、これから勉強していこうと思います。





拍手[0回]

PR