2

私はObjective-Cを学んでいますが、クラスのインスタンスとオブジェクトの違いが何であるかについて混乱しています – それらは同じですか?

例を次に示します。

 NSString *name = [[NSString alloc]initWithString:@"Harry"]; 

*nameNSStringクラスへのポインタです。@"Harry"文字列の値です。クラスnameからのオブジェクトですか、それともクラスのインスタンスと呼ばれますか?NSStringname

私が作成したクラスの別の例:

  Rectangle *rect = [[Rectangle alloc]init];  

ポインター*rectも同様です。オブジェクトですかrect、それともクラスのインスタンスですか?

4

4 に答える 4

4

ObjectiveC では、クラスのインスタンスは常にオブジェクトです。オブジェクトは常にクラスのインスタンスです。「オブジェクト」はクラスのインスタンスであり、チェーンのどこかで最終的に継承されるクラスNSObjectです。スーパークラスのないクラスを宣言するNSObjectと、暗黙のスーパークラスになります。

NSString *name = [[NSString alloc] initWithString:@"Harry"]; 

nameオブジェクトへのポインタであり、具体的にはNSString「Harry」の値を持つ のインスタンスです。すべての NSString はオブジェクトです。

Rectangle *rect = [[Rectangle alloc] init];

こっちも一緒。 rectのインスタンスであるオブジェクトへのポインタですRectangle

于 2012-04-24T22:31:11.427 に答える
3

ポインター*rectも同様です。オブジェクトですかrect、それともクラスのインスタンスですか?

それは両方です。クラスのインスタンスもオブジェクトです。ちょうど食べ終わったばかりのマッキントッシュが「クラス」アップルのインスタンスであり、果物でもあるのと同じです。

「オブジェクト」は、ある状態 (インスタンス変数) を保持し、(一般に) その状態に影響を与えるアクション (メソッド) を実行できるプログラミング構造の総称です。クラスのインスタンスは特定のオブジェクトです。

Objective-C では、オブジェクトはポインターを介してアクセスされます。それは、あなたがそれらと対話するメカニズムにすぎません。厳密に言えば、オブジェクト自体とオブジェクトへのポインターは区別されます。rectis はオブジェクトへのポインターであり、 class のインスタンスですRectangleが、日常の言語では、人々がそれらについて同じように話しているのを目にするかもしれません: rectis a Rectangle.

于 2012-04-24T22:29:02.473 に答える
2

ポインターはオブジェクトではありません。これは単に、オブジェクトが割り当てられる (格納される) メモリ内のアドレスです。したがって、オブジェクトを指します。ポインターは実際には、Objective-C が継承する C 言語の構成要素です (しゃれを許してください)。ジュリアスは、それらが同じ意味で使用されていると聞くことは正しいです。技術的には、「rect」はインスタンス/オブジェクトであり、「*」はポインターを伝えます。

于 2012-04-24T22:42:37.147 に答える
1

すべての回答に感謝しますが、私はまだ少し混乱しています。つまり、*rect は単なるポインターです。rect は Object (Rectangle クラスのインスタンス) です。メモリは rect に割り当てられます。

@peteはい、正しいです。

于 2012-04-25T01:01:55.450 に答える