Titanium Appcelerator中的setTimeout内存泄漏

时间:2011-12-14 05:00:26

标签: javascript titanium-mobile

我做了一些研究,发现使用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(); 
});

感谢!!!

2 个答案:

答案 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()
{...};