我不太熟悉Node.js中的保留周期来自Objective-C / iOS,但我写了一些代码,我希望不导致保留周期。我不确定V8处理垃圾收集有多聪明,或者我应该对此有多聪明!
在我的示例中,我创建了一个对象,该对象应该处理数据连接并将该数据反馈给父对象。为此,我使用EventEmitter .on函数来注册父对象函数。处理完所有数据后会释放父对象,但之后会在父对象和子对象之间创建一个保留周期吗? 示例代码
// Create the SonarData with the necessary information
this.sonardata = new SonarData( this.key, this.size )
// Hook events
.on( 'error', this.handleError.bind( this ) )
.on( 'done', this.handleDone.bind( this ) )
.on( 'data', this.handleData.bind( this ) );
答案 0 :(得分:5)
当释放父对象时,如果没有对子对象的其他引用,并且子对象上没有活动的消息处理程序,那么子对象将被垃圾收集得很好。 Javascript垃圾收集器在保留周期方面没有问题。它们的工作原理是代码是否仍可由任何其他活动代码访问。
因此,两个对象相互引用,但其他代码都无法访问这些对象将成功进行垃圾回收。