在 Xcode 6.3中引入了新的注释,以便更好地表达 目标 C中 API 的意图(当然也是为了确保更好地支持 Swift)。这些注释当然是 nonnull
、 nullable
和 null_unspecified
。
但是对于 Xcode 7,会出现很多警告,比如:
指针缺少一个可空性类型说明符(_ Nonnull、 _ Nullable 或 _ Null _ unspected)。
除此之外,苹果还使用了另一种类型的空性说明符,标记它们的 C 代码(来源) :
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
总而言之,我们现在有3个不同的空性注释:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
尽管我知道为什么以及在哪里使用哪个注释,但是我还是对应该使用哪种类型的注释、在哪里以及为什么使用感到有点困惑。我能得出的结论是:
nonnull
,nullable
,null_unspecified
。nonnull
,nullable
,null_unspecified
。__nonnull
,__nullable
,__null_unspecified
。_Nonnull
,_Nullable
,_Null_unspecified
。但是我仍然很困惑,为什么我们有这么多基本上做同样事情的注释。
所以我的问题是:
这些注释之间的确切区别是什么,如何正确地放置它们以及为什么?