【问题标题】: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 成员)

【问题讨论】:

    标签: c++ iphone c ios


    【解决方案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),则需要在弱链接符号旁边粘贴一个 &,因此始终使用 & 可能是一个更好的主意。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2016-05-27
    • 2012-07-15
    • 2012-01-28
    • 2011-02-13
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多