用create创建同样一个对象的代码,有时候需要retain,有时候不需要。我现在只能在运行出错时,再给它加上retain. 不运行一下,完全不知道此处应不应该retain.
create出来的对象都带有autorelease.
以下测试代码: 看注释部分。(GameDialog继承Ref,也跟其他cocos2d类一样是用create创建)
bool GameDialog::init()
{
_richText = cocos2d::ui::RichText::create();
if (nullptr==_richText)
{
return false;
}
CC_SAFE_RETAIN(_richText); //这两个地方不retain会出错!,若在场景中直接创建richbox是不需要retain的
_layer = cocos2d::LayerColor::create(cocos2d::Color4B(0, 0, 0, 0));
if (nullptr == _layer)
{
return false;
}
CC_SAFE_RETAIN(_layer);
_bgImg = cocos2d::Sprite::create(U8("pictures/dialog_bg1.png"));//这里创建sprite怎么就不需要retain了?
_charImg = cocos2d::Sprite::create(U8("heads/小红.png")); //也不需要retain
if (nullptr==_bgImg||nullptr==_charImg)
{
return false;
}
_layer->addChild(_bgImg, 1);
_bgImg->addChild(_richText, 1);
_bgImg->addChild(_charImg, -1);
auto director = Director::getInstance();
auto winSize = director->getWinSize();
_bgImg->setAnchorPoint(Vec2(0.5f, 0.0f));
_bgImg->setPosition(winSize.width / 2, 0.0f);
_charImg->setAnchorPoint(Vec2::ZERO);
_charImg->setPosition(0, _bgImg->getContentSize().height-50);
_richText->setAnchorPoint(Vec2(0.5f, 1.0f));
_richText->setPosition(Vec2(_bgImg->getContentSize().width / 2, _bgImg->getContentSize().height - 50-10));
_richText->ignoreContentAdaptWithSize(false);
_richText->setContentSize(Size(_bgImg->getContentSize().width / 2, 0));
std::string txt = U8("小明,出去玩吗?");
RichElementText* re_txt = RichElementText::create(1, Color3B::WHITE, 255, txt, U8("fonts/汉仪小隶书简.ttf"), 20);
_richText->pushBackElement(re_txt);
}
```

我勒个去