2

例えば:

@interface Fraction: NSObject {
...

NSObject使用されないのはいつNSObjectで、他のすべてのクラスの最終的な親クラスですか?

間違った用語を使用している場合は、遠慮なく訂正してください。

4

3 に答える 3

5

Cocoaには、NSObjectとNSProxyの2つのルートクラスがあります。

NSObjectは、ほとんどすべてのCocoaオブジェクトのルートクラスです。

NSProxyは、他のオブジェクトまたはまだ存在していないオブジェクトの代役として機能するオブジェクトのAPIを定義する抽象スーパークラスであり、NSDistantObjectなどのクラスのルートクラスです。

どちらのクラスもNSObjectプロトコルを実装しています。

ルートクラスを持たない独自のObjectiveCクラスを作成することも可能ですが、おそらくそれを行うことはなく、NSObjectプロトコルも実装しない限り、Cocoaでそれを使用することはできません。それでも、それは疑わしい使用になります。

于 2009-07-01T02:21:35.990 に答える
5

どのCocoaアプリでも、ランタイムクラスツリーを調べると、NSObject、Object、NSProxy、NSMessageBuilder、NSZombieの5つのルートクラスが見つかります

アプリ内のほとんどの通常のオブジェクトは、NSObjectの子孫になります。ObjectはObjective-Cの初期の元のルートクラスであり、NeXTがEnterpriseObjectsFrameworkを開発していたときにNSObjectに取って代わられました。

NSMessageBuilderは、メッセージ転送のためにランタイムによって使用されます。NSProxyは、分散オブジェクトの実装で使用され、他のプロセスまたは他のホストのオブジェクトに送信するマーシャリングメッセージを処理します。 NSZombieは、メモリリークのデバッグに使用されるクラスです。

于 2009-10-20T02:50:03.987 に答える
4

NSViewのサブクラスを作成している場合は、次のように作成します。

@interface Fraction: NSView {...

私のクラスはNSViewから継承しているからです。Objective-Cのクラスは、単一の親クラスからのみ継承します。NSViewから(その親クラスであるNSResponderまで)チェーンを上っていくと、最終的にNSObjectから継承されることがわかります。

あなたの質問の2番目の部分についてはよくわかりません。AppleのCocoaFrameworksのすべてのクラスは、最終的にNSObjectを継承すると思いますが、それについては引用しないでください。Objective-Cには、他のルートオブジェクトが存在しなかった理由はありません(そうでない場合、Objective-CはAppleシステムでのみ使用されます)。ただし、Cocoaでは、NSObjectがルートです。

于 2009-07-01T00:28:30.710 に答える