大概是这样:Sprite* _sprite = Sprite::create(?); addChild(_sprite); removeChild(_sprite);
现在_sprite->getReferenceCout() == 1,但CC_SAFE_DELETE(_sprite);或_sprite->relese(_sprite);一用就错误,这怎么弄啊?
void CircleButtonWithFive::clearClass()
{
this->removeChild(_button, true);
//_button->release();
//_button = nullptr;
}//这两句不注释this->removeChild(_button, true);则访问地址错误。
不知道是不是下面的问题:
for (CircleButtonWithFive* b1 : _vector) {
b1->clearClass();
this->removeChild(b1, true);
}
我都有点怕来这个论坛了,都没人回答,我自学画画和编程,基础比较差,还请和麻烦论坛里人看到指点下。
create()出来的对象会一帧之后自动删除,详情看autorelease
哦,自己调试了下,这个addChild()会暂时增加1引用,可能就是你说的,下次引擎数据更新后减1引用,而removeChild()后输出它的引用值变成很长的数字(不知道是不是对象地址),removeChild会减1引用然后释放内存。那要是直接删除显示对象,图像绘制刷新对象为无,那它是不是会自动从渲染列队从剔除,不需要removeChild()了。
引擎使用引用计数管理内存。引用计数方便内存共享,所以不要直接删除对象,而是用Ref::release()把引用计数减一。记住以下几个原则:
- 通过create等函数创建的对象引用计数为1,并会在一帧结束后自动把引用计数减1
- retain:引用计数加1
- release:引用计数减1