记录NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。

Nonnull区域设置(Audited Regions)安全

若是须要每一个属性或每一个方法都去指定nonnull和nullable,是一件很是繁琐的事。苹果为了减轻咱们的工做量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。atom

指针

 

#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")对象

#define NS_ASSUME_NONNULL_END   _Pragma("clang assume_nonnull end")it

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的。io

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

  • typedef定义的类型的nullability特性一般依赖于上下文,即便是在Audited Regions中,也不能假定它为nonnull。
  • 复杂的指针类型(如id *)必须显示去指定是nonnull仍是nullable。例如,指定一个指向nullable对象的nonnull指针,能够使用”__nullable id * __nonnull”。
  • 咱们常用的NSError **一般是被假定为一个指向nullable NSError对象的nullable指针
相关文章
相关标签/搜索