記錄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指針
相關文章
相關標籤/搜索