NS_ASSUME_NONNULL_BEGIN和NS_ASSUM

2018-03-01  本文已影响16人  烟雨任平生YL

Nonnull区域设置(Audited Regions)

如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事。苹果为了减轻我们的工作量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。

#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
#define NS_ASSUME_NONNULL_END   _Pragma("clang assume_nonnull end")   
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的。
不过,为了安全起见,苹果还制定了几条规则:

上一篇下一篇

猜你喜欢

热点阅读