gpt4 book ai didi

firefox - 何时释放 npapi 插件中的对象

转载 作者:行者123 更新时间:2023-12-02 07:54:02 24 4
gpt4 key购买 nike

我对 npapi 中的引用计数感到困惑。大多数情况下,我不知道哪种方法会增加引用计数。任何人都可以详细解释一下吗?为了方便起见,我在这里列出了最常用的 NPN_* 函数和我自己的理解:

NPN_CreateObject:将引用计数设置为 0

NPN_RetainObject:包括引用计数

NPN_ReleaseObject:dec 引用计数

NPN_Evaluate:?? (以防返回 NPObject*)

NPN_GetValue:?? (以防返回 NPObject*)

NPN_SetValue:?? (如果设置为 NPObject*)

NPN_GetProperty:?? (以防返回 NPObject*)

NPN_SetProperty:?? (如果设置为 NPObject*)

NPN_RemoveProperty:??

NPN_Enumerate: ??

NPN_构造:??

另一件事:npapi 是做嵌套发布的吗? (如果 NPObject* 具有 NPObject* 的属性,释放父项将减少子项的引用计数)。

谢谢。

最佳答案

评论中没有空间,无法在评论中很好地回答你的问题,所以我会放在另一个答案中。

任何时候您的代码从 NPObject 函数(您上面提到的函数之一)获取 NPObject 时,您都应该在完成后释放该 NPObject。 (这可能是立即的,或者你可以保存它一段时间并在你的对象被销毁时释放它)。 NPVariant 也是如此。它对传递给 Invoke 函数的参数成立,但您设置的返回值将在完成后由浏览器释放。

当您调用 NPN_GetValue 并从那里获取一个 NPObject 时,它也必须被释放。这意味着当浏览器调用 NPP_GetValue 时,它​​会在完成后释放您的 NPObject。如果您想在每次浏览器调用 NPP_GetValue 来获取您的 NPObject 时创建一个新的 NPObject,那么您不必在其上调用 NPN_RetainObject; NPAPI 示例中的假设是您正在保存 NPObject 的副本,以便在您的插件对象被删除之前它不会被删除。

由于浏览器每次调用 NPP_GetValue 以获取您的 NPObject 时都会调用 Release,因此您需要确保在返回之前递增引用计数。在您要保留它的情况下不必调用它两次的原因是 NPN_CreateObject 在返回您的对象之前执行隐式保留。

我在这里写了更详细的解释:

关于firefox - 何时释放 npapi 插件中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com