2013-07-30 41 views

回答

0

使用弱連接類來完成這一點:

使用或iOS版本的OS X比你的部署目標後引入的任何符號之前,請檢查符號是否可用。如果符號不可用,請提供一個替代代碼路徑。

假設您將Xcode項目中的基礎SDK設置爲iOS 4.0。這允許您的代碼在該版本中運行時使用該版本操作系統中的功能。假設你想讓你的軟件在iOS 3.1中運行,即使它不能在該版本的操作系統中使用更新的功能。通過將部署目標設置爲較早版本的操作系統來實現此目的。

在Objective-C中,instancesRespondToSelector:方法會告訴您給定的方法選擇器是否可用。例如,使用availableCaptureModesForCameraDevice:方法,第一個可用的的iOS 4.0,你可以使用如下代碼:

 
if ([UIImagePickerController instancesRespondToSelector: 
       @selector (availableCaptureModesForCameraDevice:)]) { 
    // Method is available for use. 
    // Your code can check if video capture is available and, 
    // if it is, offer that option. 
} else { 
    // Method is not available. 
    // Alternate code to use only still image capture. 
} 

當你的代碼的iOS 4.0上運行或更高版本,它可以調用availableCaptureModesForCameraDevice:確定如果視頻捕捉在設備上可用。但是,它在iOS 3.1中運行時,必須假定只有靜止圖像捕捉可用。

如果你要建立這個代碼使用不同的設置,你會看到下面的結果:因爲availableCaptureModesForCameraDevice:方法沒有定義 構建會失敗:

如果指定iphoneos3.1的基本SDK設置在那個系統版本中。

如果指定iphoneos4.0的基本SDK設置,然後將部署目標:

iphoneos4.0:該軟件將運行只在iOS 4.0或更高版本,將無法啓動較早系統。

iphoneos3.1:該軟件將在iOS 4.0和iOS 3.1中運行,但無法在早期系統上啓動。在iOS 3.1中運行時,軟件將使用替代代碼捕獲圖像。

檢查一個Objective-C特性的通過使吸氣劑的方法名(這是相同的屬性名),以instancesRespondToSelector:的可用性。

要確定弱鏈接的C函數是否可用,請使用鏈接器將不可用函數的地址設置爲NULL的事實。通過將地址與NULL或nil進行比較來檢查函數的地址 - 因此它的可用性。

參考

相關問題