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
- NS_ASSUME_NONNULL_BEGIN && NS_ASSUME_NONNULL_END
- NS_ASSUME_NONNULL_BEGIN,NS_ASSUME_NONNULL_END
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END详解
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END详解
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END是做什么的?
- iOS NS_ASSUME_NONNULL_BEGIN __nullable __nonnull 使用
- L1-019. 谁先倒 java
- 文章标题 CRB and His Birthday
- Activity的四种启动模式详解
- 关闭新打开的浏览器窗口
- [BZOJ3172][TJOI2013]单词(AC自动机+fail树)
- NS_ASSUME_NONNULL_BEGIN,NS_ASSUME_NONNULL_END
- 后缀数组 倍增算法
- Java面试知识点总结
- 系统提升与碎片化拓展
- 我和编程
- java小专题之API
- C# -- Unsafe Code and Pointers
- 目标跟踪(2)——背景分割器
- 欢迎使用CSDN-markdown编辑器