Objective-C检查是否定义了Structs

我的iOS应用程序可以使用可选的外部第三方库。

我想到了使用这个答案( 弱链接 – 检查一个类是否存在并使用该类 )并在执行特定于此库的代码之前检测该类是否存在。

但是,我发现这个外部库不是作为Objective-C类编写的,而是作为C STRUTS和函数编写的。

是否有类似的技术可以让我检查C Strut或函数是否存在? 或者一些更好的替代方法,看看这个库是否在运行时存在?

struct是编译时工件。 它们告诉编译器如何布局内存区域。 一旦完成, struct变得不必要了。 与具有元数据的Objective-C类不同, structs没有运行时存在。 这就是为什么不能在运行时检测它们的原因。

您可以通过调用dlopen并传递其路径来检查是否存在动态库:

 void *hdl = dlopen(path_to_dl, RTLD_LAZY | RTLD_LOCAL); if (hdl == NULL) { // The library failed to load char *err = dlerror(); // Get the error message } else { dlclose(hdl); } 

如果dlopen返回NULL ,则无法加载库。 您可以通过调用dlerror获取其他信息。 完成后需要调用dlclose

AFAIK必须存在经典的C函数。 它在链接过程中是静态绑定的,它不像Objective-C mehtods那样在运行时动态绑定。

因此,当代码编译AND链接时没有错误或警告,那么你应该没问题。

结构相同。