私は試してみましたが、ブロックを id 変数に正常に割り当てました。ブロックは obj-c オブジェクトですか? nil の代わりに NULL を使用する理由 (オブジェクトの場合)
2 に答える
C ブロックの優れた機能は、基本的な Obj-C オブジェクトのように動作できることです。ブロックを にキャストできid
ます。「copy」、「retain」、「release」、「autorelease」などのブロック Obj-C メッセージを送信できます。ブロックを NSArray または NSDictionary に詰め込むことができます。しかし、ブロックを実行するときが来たら、元の型にキャストし直す必要があります。
NULL、nil、Nil、および 0 は、ゼロの別の単語です。どちらを選択するかは、仲間のプログラマーのためのドキュメントにすぎません。それはコンパイラに違いをもたらします。
慣例により、NULL
は null C ポインターをnil
表し、null Obj-C オブジェクトを表します。ブロックはそれらの両方であるため、null ブロックを表すために NULL または nil を選択したことで、仲間のプログラマーがあなたを嘲笑することはありません。そして、コンパイラは確かに気にしません。
ブロックは、Objective-C コンテキストでオブジェクトとして使用できます (つまり、GCC または LLVM でコンパイルされた純粋な C または C++ プログラムもブロックを使用できますが、どちらの言語も Objective-C を理解しないため、オブジェクトとして使用することはできません)。意味のある方法で。)
通常、nil
for オブジェクト、Nil
for Class
es、およびNULL
その他のポインターに使用する必要があります。NULL
for ブロックの代わりに誰が使用しているのかわかりませんがnil
、それは私が Objective-C コンテキストで行うことではありません (以前のように、C または C++ コンテキストで、nil
Objective-Nil
を導入しないと利用できません)。 C ランタイム ヘッダーなので、ここで使用しNULL
ます。)