Xcode 6.3では、Objective-CでAPIの意図をよりよく表現するために(そしてもちろんSwiftのサポートを向上させるために)新しい注釈が導入されました。それらの注釈はもちろんnonnull
、nullable
そしてnull_unspecified
でした。
しかし、Xcode 7では、次のような多くの警告が表示されます。
ポインターにヌル可能型指定子(_Nonnull、_Nullable、または_Null_unspecified)がありません。
それに加えて、Appleは別のタイプのnull可能指定子を使用して、Cコード(ソース)をマークします。
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
つまり、まとめると、次の3つの異なるnull可能性アノテーションがあります。
nonnull
、nullable
、null_unspecified
_Nonnull
、_Nullable
、_Null_unspecified
__nonnull
、__nullable
、__null_unspecified
どのアノテーションを使用する理由と場所を知っていますが、どのタイプのアノテーションをどこでどの理由で使用するかについて少し混乱しています。これは私が集めることができるものです:
- 私が使うべき性質のために
nonnull
、nullable
、null_unspecified
。 - 私が使用する必要があるメソッドのパラメータについては
nonnull
、nullable
、null_unspecified
。 - 私が使用する必要があるCの方法については
__nonnull
、__nullable
、__null_unspecified
。 - そのような私が使用する必要があり、二重のポインタなどの他の例については
_Nonnull
、_Nullable
、_Null_unspecified
。
しかし、基本的に同じことを行うアノテーションがたくさんある理由については、まだ混乱しています。
だから私の質問は:
それらの注釈の正確な違いは何ですか、それらを正しく配置する方法とその理由は何ですか?