#ifndef __WWS__State__
#define __WWS__State__
#include "cocos2d.h"
// #include "Context.h"
// #include "Protagonist.h"
USING_NS_CC;
class Protagonist;
class Context;
class State : public Node
{
public:
State();
~State();
public:
Protagonist *m_master;
public:
static State *create(Protagonist *master);
bool init(Protagonist *master);
virtual void handle(Context *context);
virtual void description();
};
#endif
```
State 在create时有加入autorelease
State *State::create(Protagonist *master)
{
State *pRet = new (std::nothrow)State();
if (pRet && pRet->init(master))
{
pRet->autorelease();
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
```
#ifndef __WWS__Context__
#define __WWS__Context__
//#include "State.h"
#include "cocos2d.h"
USING_NS_CC;
class State;
class Context : public Node
{
public:
Context();
~Context();
private:
State *m_state;
public:
static Context* create(State *state);
bool init(State *state);
void setState(State *state);
void request();
void description();
};
#endif
```
#include "Context.h"
#include "State.h"
Context::Context()
{
}
Context::~Context()
{
}
Context* Context::create(State *state)
{
Context *pRet = new (std::nothrow)Context();
if(pRet && pRet->init(state))
{
pRet->autorelease();
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
bool Context::init(State *state)
{
if(!Node::init())
{
return false;
}
m_state = state;
return true;
}
void Context::setState(State *state)
{
if(m_state != NULL)
{
m_state->release();//崩坏的地方
CCLOG("State free!!!!");
}
m_state = state;
}
void Context::request()
{
m_state->handle(this);
}
void Context::description()
{
if (m_state)
{
m_state->description();
}
}
```
一运行到release时就跳转崩毁
有木有大神看看什么情况
autorelease不需要调用relese,会自动释放。要手动释放的,要加上retain
State *State::create(Protagonist *master)
{
State *pRet = new (std::nothrow)State();
if (pRet && pRet->init(master))
{
// pRet->autorelease(); 这段注释掉再运行
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
不行,直接就崩毁了
我的state是继承node的 我断点逐语句看 程序还是会在release 是调autorelease的东西 估计是autorelease要释放它但是又找不到它的原因
我试过加retain 但是没有任何作用 错误的位置也是一样
![``EC27T]~W6DD8THWO6HBWS.png](http://cdn.cocimg.com/bbs/attachment/Fid_41/41_312274_ff273066785377f.png)
我要release是因为 不知道什么原因 我在关闭程序时 会报错 报错的地方又含有 free 文字 我就猜是我的state没有被消除
state->autorelease()
state->retain()
谢谢 因为的state 和 context 不是可视的类 其他对象new了后没有引用 下一句代码就直接释放了 确实少了retain