求教一个lua使用的问题

function replaceScene(newScene, isPush, interval)
1------------------------
local runningScene = cc.Director:getInstance():getRunningScene()
performWithDelay(runningScene, function ( )
2---------------------
cc.Director:getInstance():replaceScene(newScene)
end, 1)
end

本意是通过这个函数来实现场景延后1s切换
这样就会出现newScene是nil的错误
为了定位错误,在1和2标记的地方打印newScene的值,发现都不是nil,而且两个地方newScene的值是相同的

如果把cc.Director:getInstance():replaceScene(newScene)拿到前面直接执行(即不用performWithDelay来延时)就一切表现正常
这是为什么?有高手有指导一下吗

performWithDelay是cocos 3.0rc1中定义的函数(extern.lua中)

function performWithDelay(node, callback, delay)
local delay = cc.DelayTime:create(delay)
local sequence = cc.Sequence:create(delay, cc.CallFunc:create(callback))
node:runAction(sequence)
return sequence
end

不知道你的newScene是传的什么,不过这么一看肯定是已经被释放掉了

如果你是直接create又没retain的话,一帧过后就释放了

哦,就是说一个scene被创建出来后,如果没有立刻调用replaceScene这类的函数的话
这个scene会在下一帧会被释放掉?
如果这样的话可能是这个问题
这样的话我需要先手工retain一次才能让它不被自动释放了?

的确是这个原因,谢谢指点!:11:

— Begin quote from ____

引用第3楼gandalf_zhh于2014-04-08 10:09发表的 :
的确是这个原因,谢谢指点!:11: http://www.cocoachina.com/bbs/job.php?action=topost&tid=197138&pid=920731

— End quote

因为autoRelease嘛,一帧过后计数就会减1了,然后就被释放了
顺带说下,你retain后记得release

function replaceScene(newScene, isPush, interval)
local runningScene = cc.Director:getInstance():getRunningScene()
newScene:retain()
performWithDelay(runningScene, function ( )
cc.Director:getInstance():replaceScene(newScene)
end, 1)
newScene:release()
end

是的,改成这样就一切正常了,我忘了cocos有自动内存池的机制