回答:
nil
id
JavaとC ++プログラマーがオブジェクトへのポインターとして考えるものの代わりにのみ使用する必要があります。NULL
非オブジェクトポインターに使用します。
そのメソッドの宣言を見てください。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
コンテキストはvoid *
(つまり、Cスタイルのポインター)なので、(型である)ではなく(NULL
として宣言されることもあります)を使用することをお勧めします。(void *)0
nil
id
context
でobserveValueForKeyPath:ofObject:change:context:
あるvoid *
として、データが渡されていないことを平均することをcontext
オブジェクトポインタだろうか?それはよくあることだと思います。それが、ドキュメントがのNULL
代わりに常に使用される理由について私が混乱している理由ですnil
。
技術的には同じもの(0)ですが、Objective-Cオブジェクトタイプには通常nilが使用され、cスタイルのポインタ(void *)にはNULLが使用されます。
NULL
あるC equivalent
のは、nil
何へのポインタ。
ここでnil is zero typed as id
、
NULL is zero typed as void*
。
NULLにメッセージを送信できない重要な点の1つ。そのため、多くの場所で、objective-Cでnilを使用することをお勧めします。