iOS官方文档中的宏定义

时间:2024-03-23 08:56:53

我们在阅读官方API时,常常会发现很多属性和方法后面会有一个宏定义在,如图:
iOS官方文档中的宏定义
NS_AVAILABLE_IOS和NS_DEPRECATED_IOS比较常见,deprecated:弃用的,available:有效的,也就是说一个代表在什么时候有效的,另一个代表在什么时候弃用的。我们来看看这些宏定义,如下:
NS_AVAILABLE_IOS(5_0)
表示这个方法可以iOS5.0之后被引入,如果在低于5.0版本中调用会出现崩溃。NS_AVAILABLE_IPHONE(5_0)同一个意思。

NS_DEPRECATED_IOS(3_0, 9_0)
表示这个方法在iOS 3.0之后被引用,但是在iOS 9.0之后被弃用,弃用并不是说被删除还是可以在9.0之后的系统调用,但是编译的时候回出现警告,建议我们更换到新的API上去,同样在iOS 3.0之前版本调用会崩溃。NS_DEPRECATED_IPHONE(5_0, 9_0)同一个意思。

NS_AVAILABLE_MAC(10_0)
表示改方法在MAC OS10.0被引入。

NS_DEPRECATED_MAC(10_0, 10_6)
表示改方法在MAC OS10.0被引入,在MAC OS10.6被弃用。

NS_AVAILABLE(10_8,5_0)
这样后面没有系统字段IOS和MAC,表示这个方法在MAC OS 10.8和iOS 5.0之后被引入。

NS_DEPRECATED(10_0, 10_6, 3_0, 9_0)
这样表示在MAC OS 10.0和iOS 3.0被引用,在MAC OS 10.6和iOS 9.0被弃用。

NS_CLASS_AVAILABLE(10_0, 9_0)
表示这个类在MAC OS 10.0和iOS 9.0之后被引入。 NS_CLASS_AVAILABLE_MAC(10_0, 9_0)和NS_CLASS_AVAILABLE_IOS(10_0, 9_0)同理

NS_ENUM_AVAILABLR(10_0, 9_0)
表示这个枚举在Mac OS 10.0和iOS 9.0之后被引入。NS_ENUM_AVAILABLR_MAC和NS_ENUM_AVAILABLR_IOS同理

__TVOS_PROHIBITED
表示在TVOS系统禁止使用。

NS_OPTIONS
一般枚举我们使用的是NS_ENUM,但是当一个枚举值需要表示多个值按位移后的值的时候我们就要用到NS_OPTIONS,也就是说NS_OPTIONS枚举出来的值,是其它多个值的位移值,表示了多个属性之间的不同情况吧。

FOUNDATION_EXPORT
这个宏定义和#define 一样用来定义常量,只是FOUNDATION_EXPORT在检测字符串是否相等的时候效率更高,用FOUNDATION_EXPORT定义出来的字符串直接可以使用str == newSt这样的形式去比较,但是用#define定义的常量字符串只能用方法 [str isEqualToString:newStr]去比较,前者直接比较指针地址,第二种是比较每一个字符是否相等,效率高于后者

NS_ASSUME_NONNULL_DEGIN && NS_ASSUME_NONNULL_END
assume 假设假定,__nullable表示对象可以为NULL和NIL, __nonnull表示对象不能为NULL,所以在NS_ASSUME_NONNULL_DEGIN和NS_ASSUME_NONNULL_END之间的代码,我们默认所有对象都是nonnulll类型,我们只需要去指定nullable的对象。如下:

NS_ASSUME_NONNULL_BEGIN
@interface Test ()
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *sex;
@property (nonatomic, copy) NSString * __nullable occupation;
@end
NS_ASSUME_NONNULL_END

这样的话nam和sex默认就是nonnull指针类型,occupation是nullable指针类型。