しかし、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 件のコメント:
コメントを投稿