Cocos2d-xの罠:メモリ管理が面倒くさい

%%title

Cocos2d-iPhoneにすっすり慣れ親しんでいた私は、メモリ管理のことを綺麗さっぱり忘れていました。

ARCじゃないのね

最近のCocos2d-iPhoneはARCという仕組みで勝手にオブジェクトの寿命を管理してくれるため、メモリ管理をそれほど意識しなくてもちゃんと動くアプリが作れるのです。

私がプログラミングを勉強し始めたころはまだretainとかreleaseとかいう面倒な仕組みが全盛期だったので、その頃は私もバリバリとメモリ管理を勉強していてそれなりに書けたのですが、もうすっかりARCのぬるま湯に浸かってボロボロです。

面倒くさいから便利なマクロでなんとかする

これについては改めて勉強しなおしつつ気をつけるしかないのですが、便利なマクロを活用すると少し楽になります。

オブジェクトを保持する時は

CC_SYNTHESIZE_RETAIN(Node *, _object , Object);

というマクロを使ってゲッターとセッターを簡単に生成しつつ、setメソッドを使ってオブジェクトを格納すると勝手にretainしてくれます。

っていうかsetメソッドを使わないとretainされません。これで3時間ハマりました。

オブジェクトを開放する時は

CC_SAFE_RELEASE_NULL(_object);

で勝手にreleaseしてくれるわnullptrを入れといてくれるわで大変便利です。ものぐさなのでonExitメソッドあたりに全部入れてます。

このルールを守っていけばそうそう困ったことにはならないはずですが、実際には何度も困ったことになりました。修行します。

参考