Cocoaでは、実際にNULL
は使用されませんが、通常、標準のCポインターが使用される場合のために予約されています。
Objective-CもCであるため、これはもちろん単なる慣例ですが、便利なものです。NSString*
ポインタをnil
、に、char*
またはvoid*
ポインタをに設定しNULL
て、違いに一目で気付くことができます。
さらに、Cocoaでは、コレクション(配列、辞書、セット)はnil
値を保持できないため、他の投稿者が指摘しているように、プレースホルダー、つまりを使用する必要があります[NSNull null]
。
[NSNull null]
ただし、これはプレースホルダーであり、コレクションはオブジェクトしか保持できないため、このプレースホルダーは標準のObjective-Cオブジェクトでもあることに注意してください。
したがって、条件ステートメントで使用する場合は、適切にテストする必要があります。たとえば、次のようになります。
id myVar = [NSNull null];
// Stuff...
if ( myVar == [NSNull null] ) {
// myVar has not been changed, do something
}
NULL
これは、条件ステートメントで値を直接テストできる標準のCイディオムとは異なります。
void *myPointer = NULL;
// Stuff...
if ( myPointer ) {
// More stuff if pointer uninitialized
}
また、演算子を[NSNull null]
使用して変数の等価性をテストすることが突然大丈夫なのはなぜだろうと思うかもしれません。==
これは、[NSNull null]
がシングルトンであり、メモリ内で常に同じ位置にあることが保証されているためです(これが==
この場合のテストです)。通常のオブジェクトではこれを行わないでください。
詳細については、ドキュメントをご覧ください。