Objective-C 名称冲突
作者: jkeller51创建于 2026年5月27日更新于 2026年5月27日
标签bug
Objective-C 具有平面命名空间和类名的运行时符号。这意味着在一个进程中,没有两个 Objective-C 类可以共享名称(请参阅 Apple 官方指南,链接:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingCode/Tasks/NameConflicts.html?utm_source=OpenAI)。在一个可能使用多个库的进程中,我们最终会出现 SFWindow 的名称冲突。Objective-C 运行时将使用第一个加载的 SFWindow。这不仅仅是一个理论问题。我正在为我的公司开发一个新的 AU/VST3 插件。我们之前的插件使用了 SFML,我现在正在开发的插件也使用了 SFML。SFML 的版本可能在两个插件之间不同 — — 更不用说其他数千个可用的插件可能也使用了 SFML。如果 SFML 以目前命名的所有 Objective-C 类进行编译,那么第一个加载的插件将控制所有其他插件使用的 SFWindow。一个插件可能会与一个与其不兼容的 SFWindow 进行接口,这很容易会导致其崩溃。我已经提交了一个 PR(链接:https://GitHub.com/SFML/SFML/pull/3719),其中包含了我对解决此问题的想法,但仍然欢迎其他想法。
内容来源: SFML/SFML