Sence 必须外部加 autorelease 吗

首先 系统自带的helloworld 的代码
Scene* HelloWorld::createScene()
{
// ‘scene’ is an autorelease object
auto scene = Scene::create();

// 'layer' is an autorelease object
auto layer = HelloWorld::create();

// add layer as a child to scene
scene->addChild(layer);

// return the scene
return scene;

}
sence的创建采用 Scene::create() 里面自带了 autorelease() 可以使得 sence 在以后被替代时候 会自动释放

而学习的例程中
sence的创建 是 new (std::nothrow) ActionManagerTestScene()
他的基类 是 TestScene(bool bPortrait = false, bool physics = false)
TestScene 的基类是 sence
也就是 基于 new sence() 创建的 sence的子类,我没有查到 ActionManagerTestScene() 在那里可以 autorelease 看不明白

void ActionManagerTest::nextCallback(Ref* sender)
{
auto s = new (std::nothrow) ActionManagerTestScene();
s->addChild( nextActionManagerAction() );
Director::getInstance()->replaceScene(s);
s->release();
}

看在这么晚还在学习的精神,给你解释下吧

scene创建出来时引用计数为1,autorelease将scene放入对象池,下一帧引用计数仍为1则被释放(delete)
release将引用计数减一,引用计数为0时释放

auto s = new (std::nothrow) ActionManagerTestScene(); s引用计数为1
s->addChild( nextActionManagerAction() );
Director::getInstance()->replaceScene(s); s引用计数为2,因为 Director::getInstance()->replaceScene
s->release(); s引用计数为1

s没有加入autorelease,执行上述代码后引用计数为1,当s被其他Scene代替时,s引用计数减1,就被释放了

不加autorelease 能自动释放吗?

当没有引用时就被释放了,比如上述示例中的s自后引用为1,当运行其他scene时,s被释放