2016-07-13 30 views
3

我已經下載了的XCode 8.2beta,爲了固定在一個項目的警告我有以下添加到header fileCAAnimationDelete這隻能從iOS的10檢測在頭文件協議的可用性 - Objective-C的

的問題是,只會增加該協議的項目沒有在iOS versions前10編譯,所以我增加了以下檢查:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 

這是正確的做法?

+1

看起來不錯,但是你可能想使用'== IPHONE_10'或類似的東西,以防萬一有一個iOS 9.4發佈(不會有,但你知道)。你將不得不以類似的方式守衛委託方法實施,我假設... – Droppy

+0

@Droppy是的,沒有想過這個!非常感謝:)如果你想發佈它作爲答案,所以我可以接受它 – Signo

回答

1

我相信你對守護宏的使用是正確的,只需稍做改動;要檢查,如果編譯爲iOS 10+,所以測試,在宏:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 

不要忘記守衛使用相同的後衛宏CAAnimationDelegate方法實現。

如果您在大量的類這樣做,那麼它可能是更方便的做到這一點在你的預編譯頭:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10 
#define VIEWS_USE_CAANIMATIONDELEGATE 1 
#else 
#define VIEWS_USE_CAANIMATIONDELEGATE 0 
#endif 

,改變後衛宏:

#if VIEWS_USE_CAANIMATIONDELEGATE 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 
+0

謝謝!只是一個錯字,我剛剛在'Availability.h'上找到了iOS 10的代碼是'__IPHONE_10_0' – Signo

+0

@Signo謝謝;更新。 – Droppy

+0

有關記錄:這種方法通常會在您使用較舊的iOS版本進行編譯時中斷,因爲'__IPHONE_10_0'明顯與iOS 10一起定義。但令人驚訝的是,該宏已經存在於'CABase.h'中。通常會發生的是,您對宏的值('100000')進行硬編碼。 –