但是在Xcode 7中,出现了很多警告,例如:
指针缺少空性类型说明符(_Nonnull、_Nullable或_Null_unspecified)。
除此之外,苹果还使用另一种空性说明符来标记它们的C代码(源自source):
CFArrayRef __nonnull CFArrayCreate(CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
因此,总结一下,我们现在有这三个不同的空性注释。
nonnull
、nullable
、null_unspecified
:用于属性和方法参数。_Nonnull
、_Nullable
、_Null_unspecified
:用于其他情况,如双指针。__nonnull
、__nullable
、__null_unspecified
:用于 C 方法。
虽然我知道为什么和在哪里使用哪种注释,但是我对应该在哪里以及为什么使用哪种类型的注释有些困惑。这是我能够收集到的:
- 对于属性,我应该使用
nonnull
、nullable
、null_unspecified
。 - 对于方法参数,我应该使用
nonnull
、nullable
、null_unspecified
。 - 对于 C 方法,我应该使用
__nonnull
、__nullable
、__null_unspecified
。 - 对于其他情况,如双指针,我应该使用
_Nonnull
、_Nullable
、_Null_unspecified
。
但我仍然困惑为什么我们有这么多基本上做同样事情的注释。
我的问题是:
这些注释之间的确切区别是什么,如何正确地放置它们以及为什么?