23

Objective-CでのNSObjectの目的/使用法は何ですか?NSObjectを次のように拡張するクラスが表示されます。

@interface Fraction : NSObject 

C ++またはJavaでは、Objective-CとJavaの両方にプリプロセッサディレクティブとインポートステートメントがありますが、NSObjectのような変数は使用しません。

クラスがObjective-CのNSObjectから明示的に継承するのはなぜですか?NSObjectからの継承を宣言しない場合の結果は何ですか?

4

5 に答える 5

14

オブジェクト指向言語には継承の概念があるため、どの継承階層にもルート クラスがあります。Java では、デフォルトの親クラス (提供されjava.lang.Objectていない場合) は ですが、Objective-C では、親クラスを明示的に宣言しないと取得されません。基本的に、クラスはルート クラスそのものになります。これは、Objective-C の新規参入者の間でよくある間違いです。そのような場合、通常は NSObject から継承したいからです。

多くの場合問題があり不可解ですが、NSObject とはまったく異なる動作をする独自のクラス階層を定義できるため、実際にはかなりの柔軟性が得られます。(Java では、これを行うことはまったく許可されていません。) 一方、自分が何をしているのかわからない場合は、この方法で簡単にトラブルに巻き込まれます。さいわい、通常は NSObject から継承すると予想されるような、親クラスが宣言されていないクラスによって定義されていないメソッドを呼び出すと、コンパイラは警告を出します。

NSObject の「使用」については、NSObject クラスNSObject プロトコルのドキュメントを参照してください。これらは、オブジェクトの割り当て、メモリ管理、比較、ハッシュ、説明の出力、クラス メンバーシップのチェック、オブジェクトがセレクターに応答するかどうかのクエリなどに使用される一般的なメソッドを定義します。基本的に、NSObject は、Objective-C オブジェクトのコア機能を提供するのに「適しています」。無料。

于 2009-10-19T15:38:32.343 に答える
6

すべてのクラスが必ずしも NSObject を継承しているわけではありませんが、alloc、retain、release などを提供するため、多くのクラスの中核となっています。

于 2009-10-19T15:38:39.133 に答える
1

NSObject は、すべてのクラスのルート クラスです。私の推定では、最も基本的な 3 つの関数は、メモリの割り当てと初期化 (alloc と init)、および記述関数の提供です。

Objective-C は、他のオブジェクトにメッセージを送信するオブジェクトに関するものです。したがって、その基本機能を提供するために NSObject が存在します。

これが奇妙に聞こえる場合は、プログラミング パラダイム、特にオブジェクト指向プログラミングについてもっと読みたいと思うかもしれません。しかし、一言で言えば、Objective C は C 言語の単純な拡張です。C を使用すると、コンピューターのメモリ、数値、および文字をプログラムすることができますが、それ以外のこと (たとえば、文字列の使用やビューの表示など) を行うには拡張部分が必要であり、NSObject はその拡張の始まりです。

クラス (NSString など) を選択し、そのスーパークラスを NSObject までたどって、各クラスが追加した機能を確認することは、有益な演習になる場合があります。

それが役立つことを願っています...

于 2012-10-20T19:35:03.097 に答える