Timers and Transitions

Timers and Transitions 可能是崩溃的其中一个最常见的原因,主要是因为无数的事件可
以发生在timer/transition开始和结束之间。更糟糕的是,当你不在使用时忘记了去取消他
们,它们可能会被困在内存中并引起更多的泄漏。

有一种方法,你能管理好它们,把所有的timers and transitions储存在表中,以便当你确
定没有timers and transitions应该运行时,你可以立即取消他们。

如果你添加下列代码到你的main.lua文件(或另一个模块然后require它),你可以轻松地追
踪你的timers and transitions并且在需要的时候立刻取消它们:

timerStash = {}
transitionStash = {}

function cancelAllTimers()
local k, v

for k,v in pairs(timerStash) do
timer.cancel( v )
v = nil; k = nil
end

timerStash = nil
timerStash = {}
end

--

function cancelAllTransitions()
local k, v

for k,v in pairs(transitionStash) do
transition.cancel( v )
v = nil; k = nil
end

transitionStash = nil
transitionStash = {}
end

然后,当你创建一个新的timer or transition时,首先分配到各自的表中,就像这样:

----------------------------------------------------------------------
--错误,名称相同会覆盖掉!用下面方法
timerStash.newTimer = timer.performWithDelay( ...

transitionStash.newTransition = transition.to( myObject { ...
----------------------------------------------------------------------
--正确
timerStash[#timerStash + 1] = timer.performWithDelay( ...

transitionStash[#transitionStash + 1] = transition.to( myObject { ...

那么你可以同时使用 cancelAllTimers() and cancelAllTransitions()方法来停止所有的
timers和transitions。如果有的timers不想取消,那么一开始就不要添加到存储表中(但
可别忘了取消它)。

原文地址:https://www.cnblogs.com/superchao8/p/2334209.html