0

メモリの場所、ポインタ、関連オブジェクトについて長い議論を交わしているうちに、ちょっとした頭痛の種に出くわしました。同じ関連オブジェクト?

理論的には、同じメモリアドレスを共有するオブジェクトは同じオブジェクトであるため、同じ関連オブジェクトを持っている必要があるため、理にかなっていますね?

4

2 に答える 2

4

2 つの Objective-C オブジェクト (またはプリミティブ、構造体、その他のデータ構造) が同じメモリ アドレスを占有することはできません。* 同じ場所にある 2 つのオブジェクトのように見えるものがある場合メモリ内にある場合、実際には 1 つのオブジェクトがあります。

オブジェクトへのアクセスにはポインタを使用します。簡単な割り当てを使用して、あるポインターを別のポインターに設定すると、次のようになります。

NSString * s = [NSString stringWithContentsOfFile:@"README"];
NSString * t = s;

次に、 1 つのオブジェクトへの 2 つのポインターがあります。オブジェクトのコピーはありません。1 つのポインターを介してオブジェクトの ivar の 1 つを変更すると、別のポインターを介してオブジェクトを見ると、変更された値が表示されます。


*完全なペダントリー: 確かに、特定の場所でデータを再解釈することはできますが(「メルの物語」を参照)、それはこの質問の範囲を超える黒魔術です。

于 2012-06-16T18:37:02.130 に答える
3

オブジェクトを渡すと言うとき、渡すのはオブジェクトではなくポインターです。そして、設定されるのはメモリアドレスです。

関連付けられたオブジェクトを指すメモリ アドレスを持つ新しいポインタがセッター メソッドに渡され、内部のオブジェクトが新しいアドレスに設定されると、両方のポインタ (渡されたものと設定されたもの) が同じメモリ アドレスを持ち、同じ関連オブジェクトを共有します。

于 2012-06-16T17:07:34.813 に答える