observeValueForKeyPath:ofObject:change:context:
-コンテキストポインタを指定しない場合、ドキュメントはNULL
の代わりにnil
を使用するのはなぜですか?
nil
は、JavaおよびC++プログラマーがオブジェクトへのポインターと考えるid
の代わりにのみ使用する必要があります。非オブジェクトポインターにはNULL
を使用します。
そのメソッドの宣言を見てください:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
コンテキストはvoid *
(つまり、Cスタイルのポインター)なので、NULL
(nil
型)ではなく、id
((void *)0
として宣言されることもあります)を必ず使用します。
技術的には同じ(0)ですが、通常、Objective-Cオブジェクトタイプにはnilが使用され、cスタイルポインターにはNULLが使用されます(void *)。
技術的には同じものであり、スタイルのみが異なります。
nil
はid
タイプ(およびオブジェクトへのポインター)に使用するものです。NULL
がvoid *
に使用するものであると言います。0
を使用するだけでよいと言われています。通常、タイプが宣言済みである言語に一致するバリアントを使用します。
NULL
は、C equivalent
のnil
であり、何もへのポインターではありません。
ここで、nil is zero typed as id
、
NULL is zero typed as void*
。
重要なポイント NULLにメッセージを送信することはできません。したがって、多くの場所でObjective-Cでnilを使用することをお勧めします。
彼らはほとんど同じことを除いて、
nil
は、Objective-Cスタイルで使用されます。ここで、NULL
はC型ポインター用であり、(void *)
にtypdefされています。