一、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