NS_ASSUME_NONNULL_BEGIN & NS_ASSUME_NONNULL_END

4,186 阅读1分钟

升级到 Xcode 10 , 新建类的时候发现头文件中多了2个宏:

  1. NS_ASSUME_NONNULL_BEGIN
  2. NS_ASSUME_NONNULL_END

作用

这两个东西是Nonnull区域设置(Audited Regions) 。

这两个宏之间的代码里的所有简单指针对象都被默认为 ___nonnull,我们只需要去指定 __nullable 的指针。


背景

2014 年的 Apple WWDC 发布了强语言 swift ,必须要指定一个对象是否为空。为了迎合swift,OC中增加了 __nullable___nonnull 用于指定对象是否为空。

每个属性、方法都指定 ___nonnull__nullable 是一件非常繁琐的事。为了减轻开发工作量,苹果提供了两个宏:NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END 。这两个宏之间的代码里的所有简单指针对象都被默认为 ___nonnull,我们只需要去指定 __nullable 的指针。