夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【cocos2d】CCCallFuncで予想外のリテイン発生?ハマった件

あるオブジェクトのdeallocが突然呼ばれなくなりデバッグに数時間かかってしまいました!

ノードAのCCCallFuncで別のノードBのメソッドを実行する場合、おそらくノードAはノードBをリテインするんですね。知りませんでした。
CCCallFuncはCCRepeatForeverの中で繰り返し呼ばれる設定になっていたのでおそらくずっとリテインしっぱなしになっていました。
このため、ノードBが親ノードから外れてもdealloc呼ばれなくなってしまいました。
ノードBが親から外れる前にStopAllActionsでノードAのアクションを止めてあげる事で無事問題は解決し、deallocが呼ばれるようになりました。