zoukankan      html  css  js  c++  java
  • NS_ASSUME_NONNULL_BEGIN,NS_ASSUME_NONNULL_END

    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指针。

    参考:  http://mobile.51cto.com/iphone-483311_all.htm

  • 相关阅读:
    链表及其各种函数操作的实现方法
    插入排序
    欧几里得算法
    Cookie和Session
    RestTemplate 中文乱码
    java8 按两个属性分组,并返回扁平List; stream排序
    Spring 读取资源
    linux搭建Git
    IDEA 快捷键
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/5316862.html
Copyright © 2011-2022 走看看