NS_ASSUME_NONNULL_BEGIN,NS_ASSUME_NONNULL_END

来源:互联网 发布:aerial mac 不能播放 编辑:程序博客网 时间:2024/05/22 07:50

Nonnull区域设置(Audited Regions)

如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事。苹果为了减轻我们的工作量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。如下代码所示:

NS_ASSUME_NONNULL_BEGIN

@interface TestNullabilityClass () 

@property (nonatomic, copy) NSArray * items; 
- (id)itemWithName:(nullable NSString *)name; 
@end 

NS_ASSUME_NONNULL_END

在上面的代码中,items属性默认是nonnull的,itemWithName:方法的返回值也是nonnull,而参数是指定为nullable的。

不过,为了安全起见,苹果还制定了几条规则:

  • typedef定义的类型的nullability特性通常依赖于上下文,即使是在Audited Regions中,也不能假定它为nonnull。
  • 复杂的指针类型(如id *)必须显示去指定是nonnull还是nullable。例如,指定一个指向nullable对象的nonnull指针,可以使用”__nullable id * __nonnull”。
  • 我们经常使用的NSError **通常是被假定为一个指向nullable NSError对象的nullable指针。



0 0
原创粉丝点击