2011年8月31日水曜日

ログ出力テストの習慣

cocos2d(0.99.5) で CCSprite を親ノードから削除した時には、CCSprite に余分な retain をしていなければ、自動でメモリが解放されます。

しかし、Objective-C を始めたばかりの時は不安がありますよね。App Storeで売られているアプリでも、メモリ管理が怪しそうなものをちらほら見かけます。
Xcode のパフォーマンスツールの Leaks を使って、メモリリークをチェックするというのもちょっと大袈裟な場合、ログを出力してテストする習慣をつけましょう。

CCSpriteの親クラスである CCNodeクラスのソースコード CCNode.m を開きます。deallocメソッドの頭には以下のように CCLOGINFOマクロが記述されています。
CCLOGINFO はcocos2d で定義されているログ出力マクロで、内容は CCLOG とまったく同じです。しかし、Debugビルドのデフォルトでは CCLOG マクロは有効になりますが、CCLOGINFO の方は無効にされています。
// CCNode.m
- (void) dealloc
{
 CCLOGINFO( @"cocos2d: deallocing %@", self);
  :
 [super dealloc];
}
CCLOGINFO マクロを有効にするためには、COCOS2D_DEBUG という定義を1から2に変更してやる必要があります。具体的には、「ターゲット cocos2d libraries の情報」ウィンドウを開き、Debugビルドの設定を以下のように変更して、ビルドし直します。


あとは自分のアプリケーション側で、以下のように CCSprite を親ノードから削除してみれば、CCLOGINFOからのログが出力されます。されなければ dealloc が呼ばれなかった事になるので、メモリリークの疑いが生まれます。
// 親ノードから削除
[sprite removeFromParentAndCleanup:YES];

ログ出力例
2011-09-01 22:42:12.225 AppName[39527:207] cocos2d: deallocing <CCSprite = 068726F0 | Rect = (326.00,1.00,32.00,122.00) | tag = -1 | atlasIndex = -1>


0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...