我做了一些研究,发现使用setTimeout()会导致内存泄漏,如this post所示。我希望找到一种补救措施或替代方案。
当我触摸任何一个按钮时,我所拥有的是一个小视图出现在屏幕上。同时我设置超时以在3秒后淡出小视图。首次按下按钮时,我也会清除超时,以便我不再继续设置多个按钮。虽然现在在分析我的代码时,我发现我正在设置间隔并清除超时。不确定这是否是我的问题的一部分。它看起来像这样:
var Modal = Titanium.UI.createView({
width:151,
height:83,
owner: null,
myView: null,
});
var modalTimer;
var addModal = function(){
clearInterval(modalTimer);
theView.add(Modal);
modalTimer = setTimeout( function() {
removeModal();
changeTurn();
},3000);
}
playerButton.addEventListener('click',function(){
addModal();
});
感谢!!!
答案 0 :(得分:1)
我可能已通过以下方式解决了这个问题:
var Modal = Titanium.UI.createView({
width:151,
height:83,
owner: null,
myView: null,
});
var modalTimer;
var addModal = function(){
clearTimeout(modalTimer);
theView.add(Modal);
modalTimer = setTimeout(removeModal(),3000);
}
playerButton.addEventListener('click',function(){
addModal();
});
我在我的removeModal()函数中放入了changeTurn()函数,并从setTimeout中删除了匿名函数。我还纠正了clearTimeout的混乱。我仍然需要看到这对延长的游戏玩法有多么好,但从第一印象来看,这已经解决了我的问题。我希望这可以帮助任何有类似问题的人。
答案 1 :(得分:0)
我不知道这是否有帮助,但我注意到如果我使用我的应用程序崩溃:
modalTimer = setTimeout(removeModal(),3000);
但如果我使用
则不会modalTimer = setTimeout(removeModal, 3000);
其中removeModal定义为
var removeModal = function()
{...};