变量
GameLayer.cpp
但是有一种特殊情况,类与变量的互相retain(),导致无法释放,内存泄露。
ActionSprite.h
当create出来的变量,被addChild到以CCNode为基类的类时,或者被addObject到CCArray、CCSet等时,都会自动将这个变量对象retain()一次,以防止被自动释放导致的野指针问题,所以一般情况都不需要再手动调用retain()方法了。对于类定义中用CC_SYNTHESIZE_RETAIN宏声明的变量,或者对临时变量手动调用了retain()方法,一般都需要在析构函数或者特定的函数进行手动调用release()方法,类似如下:
GameLayer.h
1
2 3 4 5 6 7 8 9 10 |
|
class GameLayer :
public cocos2d::CCLayer,
public SimpleDPadDelegate
{ public: GameLayer( void); ~GameLayer( void); CREATE_FUNC(GameLayer); //…… CC_SYNTHESIZE_RETAIN(cocos2d::CCArray*, _robots, Robots); }; |
1
2 3 4 5 6 7 8 9 10 11 |
|
GameLayer::GameLayer(
void)
{ //…… _robots = NULL; } GameLayer::~GameLayer( void) { //…… CC_SAFE_RELEASE_NULL(_robots); } |
ActionSprite.h
1
2 3 4 5 6 7 8 9 |
|
class ActionSprite :
public cocos2d::CCSprite
{ public: ActionSprite( void); ~ActionSprite( void); //…… CC_SYNTHESIZE_RETAIN(cocos2d::CCAction*, _attackAction, AttackAction); }; |