本文主要是介绍NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//最近看到这样一组宏定义,有了如下理解:
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和NS_ASSUME_NONNULL_END的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!