2011-12-14 70 views
1

我已經做了一點研究,並發現使用setTimeout()導致不良內存泄漏,如this post所示。我希望找到一種補救辦法或替代方案。setTimeout內存泄漏在鈦加速器

我所擁有的是當我的許多按鈕被觸摸時出現在屏幕上的小視圖。同時,我設置了一個超時,以在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

與你在你的問題中提到的你調用`setTimeout()`和`clearInterval()`相反。 – nnnnnn 2011-12-14 05:46:19

+0

非常真實,將它們混合起來...... – gjunkie 2011-12-14 06:41:14

回答

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(); 
}); 

我把我的changeTurn()函數在我removeModal()函數,並取消setTimeout的匿名函數。我也糾正了clearTimeout的困惑。我仍然必須看到,這在擴展遊戲玩法方面有多好,但從第一印象來看,這已經解決了我的問題。我希望這可以幫助任何有類似問題的人。

0

我不知道這是否幫助,但我注意到,我的應用程序崩潰,如果我使用:

modalTimer = setTimeout(removeModal(),3000); 

但不如果我使用

modalTimer = setTimeout(removeModal, 3000); 

其中removeModal被定義爲

var removeModal = function() 
{...};