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

  • 相关阅读:
    Serverless
    Kubernetes
    下一代微服务-ServiceMesh
    SOA服务治理
    微服务架构
    RPC之Thrift
    【MySQL】MySQL高可用架构之MHA
    远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
    Redis与Memcached的区别
    LVS简介
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/5316862.html
Copyright © 2011-2022 走看看