ios - 框架在 Objective-C 中强制链接类的任何方式

标签 ios objective-c linker storyboard xib

我正在制作一个框架,其中包含一个扩展 UIView 的类,以便在 iOS 应用程序中使用。如果我只是使用 Storyboard将 View 放在屏幕上,那么这不足以强制链接器将我的类包含在应用程序中,所以我得到了

Unknown class MyClassName in Interface Builder file. 

在应用程序中,有几种方法可以强制链接,但我想知道我是否可以在我的 .framework 中执行某些操作来强制应用程序链接到特定类。

我尝试了一个我会在 C 中使用的技巧,但它在 Objective-C 中是不合法的。在我看来的 .h 中,我尝试创建一个静态类全局变量,如下所示

static Class myClassInit = [MyClass class];

这样,当应用程序包含我的 .h 时,此代码会将用法放入他们的编译单元中,希望能强制建立链接。不幸的是,这不会编译,因为需要在编译时知道静态信息——我明白了:

Initializer element is not a compile-time constant

关于我可以对框架项目做些什么来强制应用程序链接到我的类的任何其他想法,只需在 Storyboard 中使用它并包含 .h 即可?

例如,还有其他问题的答案是向应用程序添加链接器标志或让应用程序调用 [MyClass class]。我想要一个解决方案,它不会强制应用程序开发者做任何超出类正常使用的事情。

例如,是否有预处理器指令或其他 Objective-C 方法来强制链接?

以防万一您不知道这一点:拥有一个导出或什至设置 View 的属性都不足以将其链接起来。

最佳答案

我发现了一些有用的东西

如果你把它放在标题的底部,在@end之后,它会强制链接

#define UNIQUENAME(s) s##__COUNTER__
Class UNIQUENAME(MyClassForceLink)()
{
    return [MyClass class];
}

您不能使用静态函数(链接器将其删除),如果您在应用中多次包含 header ,则需要唯一的名称,这样多重定义的符号就不会发生冲突。

关于ios - 框架在 Objective-C 中强制链接类的任何方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405109/

相关文章:

OpenCv 链接问题

iOS 10.3.3 导航栏不显示所有按钮

ios - 如何在 Firebase 远程配置中使用字符串而不是 plist 设置默认值?

objective-c - 如何在 objective-c 中找到鼠标的位置

objective-c - 在 Obj-C 类中找不到 Swift 协议(protocol)声明

c++ - 使用内联链接在定义冲突时生成错误

c++:运行时链接共享对象与主机应用程序,符号表问题

iphone - 自定义 View Controller 委托(delegate)不起作用

ios - AudioStreamer 在 iPhone(设备)上工作,但在模拟器上崩溃

ios - UICollectionViewCell 随机隐藏