有没有办法使用js-ctypes自动管理本机代码分配的内存?

时间:2011-08-21 08:56:49

标签: javascript c++ firefox-addon jsctypes

我继承了一个Firefox插件,非常需要更新新的Firefox 4+系列。我终于有时间研究它,但事实证明这个附加组件包括编译为XPCOM组件的本机部分,现在强烈建议不要使用XPCOM组件。因为每次新的主要版本出来时我真的不想重新编译我的二进制文件,所以我正在考虑转向js-ctypes。

由于二进制库实际上非常小而且简单,所以它看起来并不是很麻烦,但有一件事困扰着我:因为XPCOM对象(通常)实现为C ++对象,所以它们自动拥有析构函数每当JavaScript包装器对象被垃圾收集时调用。您无需在JavaScript代码中手动管理本机资源。

理想情况下,我希望与js-ctypes具有相同的功能。由于js-ctypes比XPCOM更低级,因此它不直接支持对象,但我想知道是否有一种方法可以自己创建一个包装器对象,并且当它被垃圾收集时以某种方式获得通知。我知道纯JavaScript没有析构函数的概念,但也许我仍然可以在Firefox中使用它。

1 个答案:

答案 0 :(得分:1)

不幸的是,在JavaScript中,这是一个重要的概念,你无法观察垃圾收集(至少不是来自JavaScript本身)。唯一具有析构函数功能的地方是XBL。换句话说,您可以定义一个XUL元素作为您的包装器对象(类似于<stringbundle>如何作为本地化API的包装器)。您对该元素的XBL绑定应提供必要的方法并在内部调用js-ctypes。当元素被丢弃(XBL析构函数运行)时,您可以清理并释放内存。

这当然假设您可以首先使用XUL元素。如果您的代码没有在窗口中运行,那么恕我直言,你运气不好 - 它回到手动对象跟踪,以发现不再使用该对象的时刻。