2013-01-11 234 views
0
var SetInactivityTimeOut = function() { 
    try { 
     var TimeoutInterval = parseInt(10, 10); 

     var PreviousTimeStamp = Math.round(new Date().getHours() * 60 + new Date().getMinutes()); 

     if (TimeoutInterval === 0) return; 

     TimeoutInterval = TimeoutInterval * 60 * 1000; //Converting to milisecond 
     var TimeOutObj; 
     if (TimeOutObj != null && TimeOutObj != undefined) { 
      clearTimeout(TimeOutObj); 
     } 
     //Ti.API.info('TimeOutObj---'+TimeOutObj); 
     TimeOutObj = setTimeout(function() { 
      open the main page 
     },TimeoutInterval); 

    } catch (e) { 
     error(e); 
    } 
} 

這是我使用的每個按鈕單擊的功能,一旦10分鐘的空閒時間已完成,它會打開索引頁。但是,當我嘗試從那裏登錄應用程序時,它非常緩慢並且應用程序被吊死。我正在使用移動代碼。我只是想知道函數寫入的方式是否存在任何內存泄漏。setTimeout導致內存泄漏

+0

@ H2CO3刪除一個不好的答案不會讓你錯。你有很多聲譽,請不要傳播虛假信息。 SO被很多人使用,並且在許多方面與維基百科類似。保持高標準。請。 – Khez

回答

3

由於您目前有自己的功能,TimeOutObj正在與您檢查是否存在相同的函數中聲明,它將始終存在,但始終是undefined在您檢查以查看它是否它是一個超時ID,所以你永遠不會清除超時。

通過包裝你的大多數SetInteractivityTimeout功能的閉包,你可以聲明TimeOutObj外的實際處理函數的範圍,所以每次調用的函數SetInactivityTimeout時間將保持其價值。

var SetInactivityTimeOut = (function() { 
    var TimeOutObj; 
    var TimeoutInterval = 10 * 60 * 1000; //Converting to milisecond 

    return function() { 
    if (TimeOutObj) { 
     clearTimeout(TimeOutObj); 
    } 

    TimeOutObj = setTimeout(function() { 
     // open the main page 
    }, TimeoutInterval); 
    } 
}());