iOS——确定加速框架在运行时是否可用

4
有没有办法在运行时从纯C或C++文件中确定Accelerate.framework是否可用?我找到的条件代码示例似乎都需要Objective-C内省(例如,respondsToSelector)和/或Objective-C API(例如UIDevice的systemVersion成员)。
1个回答

4
这种情况的常见处理方法是,你可以将代码与框架进行弱链接,然后检查该框架导出的函数指针的实际可用性。如果因为不可用而未能链接到该框架,则该函数将会是NULL
对于Accelerate.framework,你需要做类似于以下的操作:
#include <Accelerate/Accelerate.h>

if (cblas_sdsdot) {
    NSLog(@"Yay we got Accelerate.framework");
} else {
    NSLog(@"Oh no, no Accelerate.framework");
}

这可以在TN2064 - 确保二进制向后兼容性中找到详细说明。


啊,而且可用性宏自动处理弱链接。太简单了!谢谢! - Art Gillespie
您还需要在Xcode中将框架标记为弱链接(目标->您的目标,按“角色”排序,将正确的选项更改为弱链接)。另外请注意,如果弱链接的符号不是函数(例如UIApplicationWillEnterForegroundNotification),则需要在其旁边添加&,因此最好始终使用&。 - tc.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接