CocoaObjective-C插件碰撞

CocoaObjective-C插件碰撞,第1张

概述我的应用程序有一个插件系统,允许我的用户编写自己的插件,这些插件在运行时加载.通常这很好,但在某些情况下,两个插件使用相同的库,这将导致这两个插件之间的冲突. 例: 插件A想要使用TouchJSON来处理JSON,因此创建者将TouchJSON代码添加到插件源中,并将其编译并链接到插件二进制文件中.后来插件B也希望使用相同的库并完全相同.现在,当我的应用程序加载这两个不同的插件时,它会检测到这个并 我的应用程序有一个插件系统,允许我的用户编写自己的插件,这些插件在运行时加载.通常这很好,但在某些情况下,两个插件使用相同的库,这将导致这两个插件之间的冲突.

例:

插件A想要使用touchJSON来处理JSON,因此创建者将touchJsON代码添加到插件源中,并将其编译并链接到插件二进制文件中.后来插件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.

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

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

我能做些什么吗?

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

你可以用这个问题file a bug report.

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

总结

以上是内存溢出为你收集整理的Cocoa / Objective-C插件碰撞全部内容,希望文章能够帮你解决Cocoa / Objective-C插件碰撞所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1004891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存