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

人已赞赏
iOS文章

iOS containsobject 比较对象

2020-2-29 22:20:09

iOS文章

OC内存管理

2020-2-29 22:23:24

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索