1

我正在使用大量 10.000+ 的标记,它们都应该是可点击的。目前我为每个标记创建一个单独的回调函数,它是我需要的所有数据的闭包。我试图阻止创建 10.000 个函数,它们都做同样的事情并将我需要的数据作为参数传递给 cb 函数,但这似乎是不可能的。

但是无论如何,有一种方法可以将数据获取到回调函数。'This' 在 cb 函数中指向实际单击的标记,如果我将它们附加到标记对象,我可以访问所需的数据。这很脏,但它似乎工作。

但这会导致更多问题:我怀疑这会导致内存泄漏。我在标记代表的对象中引用标记,例如 obj.marker,但是要访问 cb 函数中的对象,我必须引用像 marker.obj 这样的对象

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

这会造成内存泄漏吗?我可以通过其他技术将所需的数据传递给回调函数吗?

4

1 回答 1

0

你采取的方法没有任何问题。当您希望“清理”(让 GB 清理未使用的引用)的引用被留下时,就会发生内存泄漏。

考虑一下,如果内存中存在标记,并且您删除了 obj,因为标记持有对 obj 的引用,那么 GB 将不会拾取 obj 来释放该内存部分。

于 2015-11-16T10:53:04.423 回答