NS_ASSUME_NONNULL_BEGIN

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

NS_ASSUME_NONNULL_BEGIN

...

NS_ASSUME_NONNULL_END

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

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

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

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

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

你可能感兴趣的:(NS_ASSUME_NONNULL_BEGIN)