iOS废弃的API:NS_AVAILABEL_IOS and NS_DEPRECATED_IOS and __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

你可能感兴趣的:(iOS废弃的API:NS_AVAILABEL_IOS and NS_DEPRECATED_IOS and __attribute__((deprecated)))