gpt4 book ai didi

objective-c - Cocoa/Objective-C 插件冲突

转载 作者:太空狗 更新时间:2023-10-30 03:51:29 25 4
gpt4 key购买 nike

我的应用程序有一个插件系统,允许我的用户编写他们自己的插件,这些插件在运行时加载。通常这很好,但在某些情况下,两个插件使用相同的库会导致两者之间发生冲突。

例子:

插件 A 想要使用 TouchJSON 来处理 JSON,因此创建者将 TouchJSON 代码添加到插件源代码中,并将其编译并链接到插件二进制文件中。稍后 Plugin B 也想使用相同的库并做完全相同的事情。现在,当我的应用程序加载这两个不同的插件时,它会检测到这一点并发出如下警告:

Class CJSONScanner is implemented in both [path_to_plugin_a] and [path_to_plugin_b]. One of the two will be used. Which one is undefined.

由于我的应用程序只是加载插件并确保它们符合特定协议(protocol),所以我无法控制加载哪些插件以及两个或多个插件是否使用相同的库。

只要两个插件使用完全相同版本的库,这可能会起作用,但一旦一个插件中的 API 发生变化,就会出现一堆问题。

我能做些什么吗?

最佳答案

捆绑加载系统没有提供和平解决名称冲突的方法。事实上,我们被告知要 ensure ourselves that the problem doesn't happen ,而不是如果发生了该怎么办。 (显然,在您的情况下,这是不可能的)。

你可以 file a bug report有这个问题。

如果这对您的应用程序绝对至关重要,您可能希望将包放在单独的进程中并使用某种 IPC(可能是 NSDistantObject)将数据从您的程序传递到插件主机.但是,我相当确定这是一个伤害包,所以如果您没有非常明确定义的接口(interface)来允许分发到不同的进程中,这可能是一项艰巨的任务。

关于objective-c - Cocoa/Objective-C 插件冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6344559/

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