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 - 不确定是不是保存