我创建了一个对象this.bookView = new BookView();
当我执行this.bookView=null
时,垃圾收集器不会删除对象。
Google Dev Tool Profile Snapshot Retainers窗口显示以下连接(显示某些内容引用了该对象)。
除"Preview is not available"
以外,所有行均为context in ()
。
问题是BookView
有addSheet
函数变量尚未在任何地方使用(尚未),但通过_this
保留了自身的参考。
我尝试了什么:
1)this.bookView.addSheet = null;
(没有帮助)
2)delete this.bookView.addSheet;
(没有帮助)
我的问题:
1)如何从Window中删除此连接并使bookView
被垃圾回收?
2)为什么addSheet
变量是从Window对象链接的?
3)transitions
窗口上的descriptors
和retainers
是什么?
4)我可以使用哪些其他工具来查找有关此类内存泄漏的更多详细信息。
P.S。在Durandal页面内创建bookView
对象。 this.bookView
基本上是page1.bookView
。页面已正确删除。在deactivate
(页面删除)功能期间,我致电this.bookView = null;
答案 0 :(得分:2)
如果您未在BookView
内实例化function
,则this
将是您的window
对象,这是全局的。您已将其全局附加到将关闭浏览器或选项卡之前将存在的一个对象。您可以尝试BookView
delete window['bookView']
编辑:在您的Durandal页面停用回调,浏览this
并删除其密钥。
for(var key in this)
delete this[key];