iOS中的关键字和宏(3):常见的几个宏

1、NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END

  • 现在新创建的h文件中,xcode都会自动的帮我们加上这两个宏。在这两个宏中间声明的属性和方法参数都默认为nonnull,表示不能为nil,如果为属性或者方法参数设置为nil时,xcode就会给出Null passed to a callee that requires a non-null argument的警告
  • 如果想要取消警告,可以加上__nullable
@property (nonatomic,copy) NSString * __nullable img_url;

- (void)setCtrlTitle:(NSString * __nullable)titleStr;

2、NS_UNAVAILABLE

  • 表示不能让外界获取到这个方法,比如我写了一个类供外界使用,我们不想让外部调用时用init方法去初始化,而是希望调用我们指定的方法去初始化,就可以在.h文件中这样写
- (instancetype)init NS_UNAVAILABLE;
  • 使用了NS_UNAVAILABLE后在外界调用时编译器不但不会提示补全init方法,就算强制使用了init也会报错

3、NS_DESIGNATED_INITIALIZER

  • NS_DESIGNATED_INITIALIZER指定初始化方法,当一个类提供多种初始化方法时,所有的初始化方法最终都会调用这个指定的初始化方法
  • 在第三方库中,一个类中会提供多个初始化方法,但是这多个初始化方法可能最终都是调用到了一个初始化方法中,如果在最终的方法中加上了NS_DESIGNATED_INITIALIZER,那么在阅读代码时就能很方便的找到最终的方法,从而省去了从一个一个方法去找的麻烦

这三个宏在第三方库中经常用到

系列文章
iOS中的关键字和宏(1):instancetype与id的区别
iOS中的关键字和宏(2):static与extern总结

参考文章
教你一行代码使用 KVO(Facebook 出品 FBKVOController 源码使用及解读)

你可能感兴趣的:(iOS中的关键字和宏(3):常见的几个宏)