天天看點

iOS廢棄的API:NS_AVAILABEL_IOS and NS_DEPRECATED_IOS and __attribute__((deprecated))一、NS_AVAILABEL_IOS二、NS_AVAILABLE三、NS_DEPRECATED_IOS四、NS_DEPRECATED五、gcc attribute((deprecated))

一、NS_AVAILABEL_IOS

例如:

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);
           

該NS_AVAILABLE_IOS(5_0)告訴我們這個方法可以在iOS5.0及以後的版本中使用。如果我們在比指定版本更老的版本中調用這個方法,就會引起崩潰。

二、NS_AVAILABLE

- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx NS_AVAILABLE(10_8, 6_0);
           

這裡的NS_AVAILABLE宏告訴我們這方法分别随Mac OS 10.8和iOS 6.0被引入。

三、NS_DEPRECATED_IOS

例如:

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
           

NS_DEPRECATED_IOS(2_0, 6_0)

這裡的宏有兩個版本号,前面一個表明了這個方法被引入時的iOS版本,後面一個表名它被廢棄時的iOS版本。本廢棄并不是指這個方法就不存在了,知識意味着我們應當開始考慮将相關代碼遷移到新的API上去了。

四、NS_DEPRECATED

例如:

- (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)cnt NS_DEPRECATED(10_0, 10_6, 2_0, 4_0);
           

這裡表示這個方法雖Max OS 10.0和iOS 2.0被引入,在Mac OS 10.6和iOS 4.0後背廢棄。

五、gcc attribute((deprecated))

可以修飾函數或者是某個變量,對函數表名此函數屬性訓示存在某個函數,但是如果使用這個不提倡使用的函數,編譯器必須生成警告;對變量表名可以使用deprecated變量屬性聲明不提倡使用的變量,而不會導緻編譯器發出任何警告或錯誤。但是,對deprecated變量的任何通路都會生成警告,但仍會進行編譯。警告指出了使用和定義變量的位置。這有助于确定不提倡使用特定定義的原因。

在iOS的AvailabilityMacros中對attribute((deprecated))進行了宏定義,DEPECATED_MSG_ATTRIBUTE(s),其中s是可選參數表明編譯是發出警告的内容,根據gcc标準其必須是字元串類型;

例如:

  • ①、添加頭檔案: #include

繼續閱讀