4
Objective-Cにおけるnullable、__ nullable、_Nullableの違い
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。 しかし、基本的に同じことを行うアノテーションがたくさんある理由については、まだ混乱しています。 だから私の質問は: それらの注釈の正確な違いは何ですか、それらを正しく配置する方法とその理由は何ですか?