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 源码使用及解读)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • static: 1、static可以修饰OC中所有的成员变量,有局部和全局之分;static还可以修饰方法 2、s...
    窗内户外阅读 1,787评论 0 0
  • 未完,以后遇见新的继续加2018.12.4 增加9,10,11。最近几个月真的是忙,公司有毒。几个项目一起搞,还只...
    阿洋12138阅读 5,455评论 2 2
  • FOUNDATION_EXTERN 定义 表示 extern 全局变量,此时并没有分配内存,需要在.m文件中实现,...
    CodingIran阅读 4,935评论 0 0
  • 前言 通过阅读别人的优秀源码,你会发现别人的开源API设计中,有一些宏你是经常忽略的,或者你不知道的。通过这些宏,...
    gitKong阅读 10,589评论 5 41
  • 1.NSAssert NSAssert()是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递...
    字节码阅读 5,450评论 0 5

友情链接更多精彩内容