iOS — 确定 Accelerate.framework 在运行时是不是可用

Posted

技术标签:

【中文标题】iOS — 确定 Accelerate.framework 在运行时是不是可用【英文标题】:iOS — Determining whether Accelerate.framework is available at runtimeiOS — 确定 Accelerate.framework 在运行时是否可用 【发布时间】:2010-08-20 21:13:31 【问题描述】:

有什么方法可以确定 Accelerate.framework 在运行时是否可用直接来自 C 或 C++ 文件?

我发现的条件编码示例似乎都需要 Objective-C 内省(例如,respondsToSelector)和/或 Objective-C api(例如,UIDevice 的 systemVersion 成员)

【问题讨论】:

【参考方案1】:

通常的技巧是,您对框架弱链接,然后检查该框架导出的函数指针的实际可用性。如果框架因为不可用而无法链接,则函数将为NULL

所以对于Accelerate.framework,你会做这样的事情:

#include <Accelerate/Accelerate.h>

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

这在TN2064 - Ensuring Binary Backwards Compatibility中有描述

【讨论】:

啊,可用性宏会自动处理弱链接。很简单!谢谢! 您还需要在 Xcode 中将框架标记为弱链接(目标 -> 您的目标,按“角色”排序,将右侧更改为弱链接)。另请注意,如果它们不是函数(例如 UIApplicationWillEnterForegroundNotification),则需要在弱链接符号旁边粘贴一个 &,因此始终使用 & 可能是一个更好的主意。

以上是关于iOS — 确定 Accelerate.framework 在运行时是不是可用的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 核心数据 - NSManagedObjectContext - 不确定是不是保存

iOS 确定视频中的帧数

确定应用程序是打开还是关闭 (iOS)

iOS密码框实现取消确定按钮

iOS — 确定 Accelerate.framework 在运行时是不是可用

iOS - 不确定如何正确更新 iOS 7 的 cocoapods 配置