1

新しいオブジェクトを作成して初期化するときに、なぜ id を使用するのでしょうか? (NSObject*) を使用できませんか?

4

2 に答える 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 *idvoid *

于 2012-04-23T15:17:41.507 に答える