2012-04-09 13 views
1

私は膨大なマーカー10.000+を使用していますが、それらはすべてクリック可能でなければなりません。現時点では、必要なすべてのデータをクロージャーする、各マーカーのコールバック関数を作成します。私は10.000の関数を作成するのを防ぎようとしました。これはすべて同じで、引数として必要なデータをcb-functionに渡しますが、これは不可能です。Googleマップのコールバック関数にデータを渡してメモリリークを防ぐ方法

しかし、コールバック関数にデータを取得する方法があります。 'this'はcb関数を実際のクリックしたマーカーにポイントし、マーカーオブジェクトにアタッチすると必要なデータにアクセスできます。これは非常に汚いですが、うまくいくようです。

しかし、これはさらなる問題を引き起こします。これはメモリリークを引き起こすのではないかと疑います。私は、これはメモリリークを作成してい

// Callback function for clicks on markers 
function cb(e){ 
    console.log(e); // the event with information about marker position 
    console.log(this.obj); // the object the marker stands for 
} 

//add a eventListener to the marker which represents a object 
this.initMarkerListener = function(obj) { 
    obj.marker.obj = obj;  //the critical point 
    google.maps.event.addListener(obj.marker, 'click', cb); 
}; 

マーカーのようなobj.markerの略で、オブジェクトにマーカーを参照するが、marker.objのように、私はオブジェクトを参照する必要がCB-機能でオブジェクトにアクセスする

?必要なデータをコールバック関数に渡すことはできますか?

答えて

0

あなたが取ったアプローチには何も問題はありません。メモリリークは、「クリーンアップ」(GBが未使用の参照をクリーンアップする)と予想される参照が残っている場合に発生します。

マーカーがメモリに存在し、objを削除すると、マーカーがobjへの参照を保持するため、GBはそのメモリ部分を解放するためにobjを選択しません。

関連する問題