iOS系统库头文件中的宏

  • NS_UNAVAILABLE 与 NS_DESIGNATED_INITIALIZER

    NS_UNAVAILABLE 指定的方法表示禁止使用此方法来初始化,否则报错
    NS_DESIGNATED_INITIALIZER 无论调用哪种初始化方法,最终,都会调用NS_DESIGNATED_INITIALIZER指定的方法,即接收参数最多的那个初始化方法,其他初始化方法调用它即可,这样设计的目的是为了保证所有初始化方法都正确地初始化实例变量。

  • NS_ASSUME_NONNULL_BEGIN, NS_ASSUME_NONNULL_END
    在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。

  • NS_AVAILABLE_IOS(5_0)
    这个方法可以在iOS5.0及以后的版本中使用,如果在比5.0更老的版本中调用这个方法,就会引起崩溃。

  • NS_DEPRECATED_IOS(2_0, 6_0)
    这个宏中有两个版本号。前面一个表明了这个方法被引入时的iOS版本,后面一个表明它被废弃时的iOS版本。被废弃并不是指这个方法就不存在了,只是意味着我们应当开始考虑将相关代码迁移到新的API上去了。

  • NS_AVAILABLE(10_8, 6_0)
    这个宏告诉我们这方法分别随Mac OS 10.8和iOS 6.0被引入。

  • NS_DEPRECATED(10_0, 10_6, 2_0, 4_0)
    这个方法随Mac OS 10.0和iOS 2.0被引入,在Mac OS 10.6和iOS 4.0后被废弃。

  • NS_CLASS_AVAILABLE(10_11, 9_0)
    这个类分别随Mac OS 10.11和iOS9.0被引入。

  • NS_ENUM_AVAILABLE(10_11, 9_0)
    这个枚举分别随Mac OS 10.11和iOS9.0被引入。

  • NS_EXTENSION_UNAVAILABLE_IOS
    extension里不能用此接口

  • API_DEPRECATED
    可以注明弃用原因

  • API_DEPRECATED_WITH_REPLACEMENT
    可以注明替代接口

  • UIKIT_EXTERN
    将函数修饰为兼容以往C编译方式的、具有extern的特性

  • NS_REQUIRES_SUPER
    用于声明子类在重载父类的这个方法时,需要调用父类的方法。

  • _kindof
    在声明时,对集合类型的对象增加泛型的修饰
    例如,@property(nonatomic, strong) NSMutableArray<__kindof UIView > viewArray; 只限定了存储类型为UIView,因此也可以存储UIView的子类,例如UIButton
  • NS_NOESCAPE
    用于修饰方法中的block类型参数,
@interface NSArray: NSObject
- (NSArray *)sortedArrayUsingComparator:(NSComparator NS_NOESCAPE)cmptr
@end

作用是告诉编译器,cmptr这个block在sortedArrayUsingComparator:方法返回之前就会执行完毕,而不是被保存起来在之后的某个时候再执行。编译器知道之后,就会相应地做一些优化,例如去掉一些多余的对self的捕获、retain、release操作。因为block的存活范围仅限于本方法内,没有必要再在block内保留self了。

  • __TVOS_PROHIBITED
    表示TVOS 禁止使用

  • NA
    表示缺省 参数无效不用填

参考
https://www.jianshu.com/p/d4110f582269
https://www.jianshu.com/p/55adac99377b

你可能感兴趣的:(iOS)