当 JS 值被垃圾回收时调用本机代码
Posted
技术标签:
【中文标题】当 JS 值被垃圾回收时调用本机代码【英文标题】:Call native code when a JS value is garbage collected 【发布时间】:2020-06-24 11:20:18 【问题描述】:在我的应用程序中,我创建了一些 JS 对象,并在 C++ 端创建了一些用于运行某些处理的对象。 我想在不再需要 C++ 对象时删除它们:对应的 JS 对象是 Garbage Collected。
我试图在 Cobalt 源代码/文档中找到它,但我找不到。我确实看到了 ScriptValue::Reference 但这似乎是相反的: 通过声明 JS 值和 C++ 对象之间的关系来防止 JS 对象被垃圾回收。
有人可以提供一些提示如何实现吗? (当对象被垃圾回收时,在 C++ 中调用一些回调)。
【问题讨论】:
【参考方案1】:任何暴露给 javascript 的 C++ 类都必须继承(直接或间接)script::Wrappable
,它有一个虚拟析构函数。当相应的 JavaScript 对象因垃圾回收或 JS VM 拆除而被销毁时,将调用此析构函数。
通常需要注意:GC 顺序和时间是不确定的。如果您需要尽快释放关键资源,请向 JavaScript 公开显式清理方法。
请参阅cobalt::dom::Node::~Node()
,了解销毁时执行的清理示例。
【讨论】:
以上是关于当 JS 值被垃圾回收时调用本机代码的主要内容,如果未能解决你的问题,请参考以下文章