新しいオブジェクトを作成して初期化するときに、なぜ id を使用するのでしょうか? (NSObject*) を使用できませんか?
2 に答える
6
Objective C のすべてのオブジェクトがNSObject
. NSProxy
から派生していない他のルート クラス (たとえば、 ) がありNSObject
ます。
id
絶対に任意のオブジェクトを意味します。メッセージ ( を含む) を受け取ることができるすべてが Objective C であり、型の警告なしClass
で渡すことができます。id
NSObject*
から実際に派生したオブジェクトでのみ有効ですNSObject
。それから派生していないものを渡すと、型チェッカーは文句を言います。
于 2012-04-23T15:20:49.897 に答える
1
NSObject
は明確な Objective C クラスであるためです。これは、ほとんどすべての基本クラスです(* すべてではない、HamsterGene に +1) が、それでもクラスです。
そして、新しいオブジェクト (から派生するNSObject
任意の型) をそれに割り当てると、作成したサブクラス化された型の継承とプロパティが失われます。
id
メモリの任意のランダムなチャンク (内容やタイプを気にせずに) を に割り当てる方法と同様に、Objective C オブジェクトを に割り当てることができる動作とほぼ同等です。void *
id
void *
于 2012-04-23T15:17:41.507 に答える