2011-12-14 22 views
1

私はちょっとした研究をして、this postにあるように、setTimeout()を使用するとメモリリークが悪化することを発見しました。私は救済策や代替策を見つけることを望んでいます。チタン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(); 
}); 

ありがとうございます!

+0

あなたの質問にお答えしましたが、あなたは 'setTimeout()'と 'clearInterval()'を呼び出しています。 – nnnnnn

+0

非常に真実で、それらを混ぜ... – gjunkie

答えて

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の混乱を修正しました。私はまだこれが拡張されたゲームプレイでどれほどうまくいくかを見なければならないが、最初の印象からこれが私の問題を解決した。私はこれが似たような問題を持つ人に役立つことを願っています

0

このことができます場合、私は知らないが、私が使用している場合、私は私のアプリがクラッシュしたことに気づいた:

modalTimer = setTimeout(removeModal(),3000); 

が、私はremoveModalは次のように定義されて

modalTimer = setTimeout(removeModal, 3000); 

を使用する場合はしません

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

-1: 'setTimeout'は、関数呼び出しの結果ではなく、パラメータとして関数を取ります。 'removeModal()'は動作しません。 – fluffy

関連する問題