调用NPN调用默认值()时有关NPObject所有权的问题

时间:2011-02-17 10:08:17

标签: javascript npapi

我编写了一个NPAPI插件来与JavaScript进行互动。我的JavaScript代码加载此插件并在其上进行异步调用以提供回调。当需要从我的plug-in调用回调(JS)时,我正在调用NPN_InvokeDefault()。我要传递给JavaScript的参数包括:我创建的NPObject并将其转换为NPVariant,然后转到NPN_InvokeDefault().我的问题是谁取得了所有权这个对象 - 我是否负责通过调用NPN_ReleaseVariantValue()释放此对象?或者由Webkit(在JS上下文中)拥有?

1 个答案:

答案 0 :(得分:1)

您可能希望查看关于此主题的博文:http://npapi.com/memory

简短的回答是,您应该释放后,您保留控制权的任何内容。由于使用InvokeDefault,您仍然可以控制NPVariant数组,之后需要释放所有NPVariant;如果InvokeDefault另一侧的代码需要保留它,则负责根据需要保留,复制等。

此规则的唯一例外是,当您从NPObject上的函数返回NPVariant时,您将失去对它的控制权,浏览器负责释放它;同样,浏览器从InvokeDefault(返回值)返回给您的任何内容都是您有责任发布的。

希望有所帮助。

相关问题