10

多くの Objective-C 開発者は、初心者でもエキスパートでidも、オブジェクトをキャストして古いメッセージを送信しても影響を受けずに (少なくともコンパイラから) 魔法のキャッチオール型であるかのように考えているようです。しかし、実際に の定義を見るとid、それは へのポインタにすぎませんobjc_object。このように、これは文字通り「Objective-C オブジェクト」ですが、から「派生」することはできませんid。NSObject のヘッダーでさえ、次のようには見えません。

@interface NSObject : id

それはただ読む:

@interface NSObject

さて、私はidの想定される型中立性はその実装の副作用であると固く信じていますが、そうではないと考える人がまだいるので、私は尋ねなければなりません:

型の主な機能は正確には何idですか?

4

1 に答える 1

10

idあなたが見つけたように、単なる一般的なオブジェクトポインターです。これはクラスではないため、何も継承できません。 NSObject厳密に言えば、Objective-C 言語自体の一部ではなく、特定の実装の一部にすぎません。

id型付けが弱い Objective-C のような言語には便利です。これにより、一般的なオブジェクト ポインターを保持し、それらに任意のメッセージを送信できます。

于 2013-06-10T15:16:10.850 に答える