2010-08-20 43 views
4

是否有任何方法可以確定Accelerate.framework在運行時上是否可從直接C或C++文件獲得?iOS - 確定Accelerate.framework在運行時是否可用

的例子我已經找到了條件編碼似乎都需要Objective-C的內省(例如,respondsToSelector)和/或Objective-C中的API(例如,的UIDevice的systemVersion成員)

回答

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 - Ensuring Binary Backwards Compatibility

+0

阿描述和可用性宏自動處理的弱鏈接。很簡單!謝謝! – 2010-08-20 22:29:38

+0

您還需要將框架標記爲Xcode中的弱鏈接(目標 - >您的目標,按「角色」排序,將正確的更改爲較弱)。另外請注意,如果它們不是函數(如UIApplicationWillEnterForegroundNotification),則需要在弱鏈接符號旁邊貼上&,所以總是使用&可能是更好的主意。 – 2010-08-21 00:10:16

相關問題