0

我在我的主干代码中定义了一个 ListView 和 InstanceView。ListView 与一个集合相关联,它像这样实例化一个 InstanceView

render: function () {
   this.collection.forEach(function(instance){
       var commentHTML = new InstanceView({
         model: instance
       }).render();
       renderedComments.push(commentHTML);
   });
}

渲染调用完成后,新视图实例超出范围。不过,我注意到该视图仍然存在于内存中。我可以说是因为附加到它的事件在渲染方法终止后很长时间仍然会触发。

那么,视图是否因为它对模型对象的引用而避免 gc,而模型对象又被集合引用?

4

2 回答 2

2

创建视图时,事件会在模型上注册。回调有对视图的引用,防止它被 gc'ed。

查看github上的主干代码。事件与delegateEvents方法挂钩。

于 2013-06-21T17:41:54.423 回答
1

每当 JS 引擎想收集对象时,就会对对象进行垃圾收集。

但是,您的问题实际上是不同的。

仅仅因为无法访问对象并不意味着:

  1. 没有什么可以,而且
  2. 它附着的东西消失了。

此外,您将对象显式添加到集合中,因此它不符合收集条件。

于 2013-06-21T17:42:23.293 回答