NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END

本文解析了NS_ASSUME_NONNULL_BEGIN与NS_ASSUME_NONNULL_END宏的作用,即在这两个宏定义之间,默认所有的简单指针都被视为非空,从而简化了Objective-C中的空指针管理。文章还介绍了苹果制定的安全规则,包括typedef定义的类型不能假定为nonnull,复杂的指针类型必须明确指定nonnull或nullable等。

   //最近看到这样一组宏定义,有了如下理解:

         NS_ASSUME_NONNULL_BEGIN

   ... 

   NS_ASSUME_NONNULL_END

   一、在这两个宏之间的代码,所有简单指针都被假定设为非空(nonnull),因此我们只需要去指定那些可为空的(nullable)的指针,这样不用麻烦的去将每个属性或方法都去指定nonnullnullable,减轻了开发的工作量。

     二、为了安全起见,苹果还制定了几条规则:

  1.typedef定义的类型的nullability(typeof(COREVIDEO_DECLARE_NULLABILITY))特性通常依赖于上下文,即使是在Nonnull组成的这两个宏定义区域设置中,也不能假定它为nonnull

  2.复杂的指针类型(id *)必须显示去指定是nonnull还是nullable。例如,指定一个指向nullable对象的nonnull指针,可以使用”__nullable id * __nonnull”

  3.我们经常使用的NSError **通常是被假定为一个指向可为空的nullable NSError对象的nullable指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值