2013-06-10 7 views
10

多くのObjective-C開発者は、初心者でも専門家でも、idをオブジェクトをキャストして、結果を出すことなく(コンパイラから)少なくとも魔法のキャッチオール型であるかのように思えます。 。しかし、実際にidの定義を見ると、objc_objectへのポインタにすぎません。このように、文字通り「Objective-Cオブジェクト」ですが、何もidから「降下」することはできません。それはちょうど読みidは "ルートタイプ"か、それとも単にタイプですか?

@interface NSObject : id 

@interface NSObject 

を、私はid年代はずタイプの中立性は、そのの副作用であることをしっかりと信念のだとしてもNSObjectののヘッダーが見えませんまだ考えていないものがあるので、私は尋ねなければならない:

idタイプの主な機能は何ですか?

答えて

10

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

idはObjective-Cのような弱いタイピングを持つ言語にとっては便利です。ジェネリックオブジェクトポインタを保持し、それらに任意のメッセージを送ることができます。

+1

+1言語と実装の区別。 – utahwithak

+2

@bbumのidの定義に似ています。彼はそれをObjCの「中立型」をシミュレートする「あらゆるメッセージを受け取ることができる型」と表現した。 – CodaFi

+0

それは良い説明です、そうです。 –

関連する問題