簡體   English   中英

Titanium Appcelerator中的setTimeout內存泄漏

[英]setTimeout memory leak in Titanium Appcelerator

我已經做了一點點研究,並已發現,使用的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(); 
});

謝謝!!!

我可能已通過以下方法解決了此問題:

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的困惑。 我仍然必須看到它在擴展游戲性方面的表現如何,但是從第一印象開始,這已經解決了我的問題。 希望這對遇到類似問題的人有所幫助。

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

modalTimer = setTimeout(removeModal(),3000);

但是如果我用不

modalTimer = setTimeout(removeModal, 3000);

其中removeModal定義為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM