-1

私はオブジェクトについて十分に理解していると思っていましたが、そうではないようです。2 つのオブジェクトが同じ名前の場合はどうなりますか? どちらもメモリ内の同じ場所を指していますか? したがって、次のようなクラスが1つあったとします。

SomeClass *someObject = [SomeClass new];
someObject.text = @"test";

そして、別のクラスが同じオブジェクトを同じ名前でインスタンス化します。

SomeClass *someObject = [SomeClass new];
someObject.textColor = [UIColor redColor];

これにより、同じオブジェクトが「テスト」と書かれた赤いテキストに変更されますよね?

ありがとう!〜カーペットフィズ

4

3 に答える 3

3

いいえ、これらの 2 つのポインターは、メモリ内の 2 つの異なるオブジェクトを指しています。同じ名前でも構いません。それらは、2 つの異なるクラスで別々に割り当てられ、初期化されました。

ところで、新しいメソッドを使用してオブジェクトを割り当てて初期化しないでください。割り当てと初期化は 2 つの異なるプロセスであるため、新しいメッセージは推奨されません。代わりにこれを使用する必要があります。

SomeClass *someObject = [[SomeClass alloc] init];
于 2013-06-01T15:16:32.910 に答える
2

いいえ。2 つの変数がたまたま同じ名前を共有しているからといって、それらが同じメモリ位置を共有しているとは限りません。これがコンパイルされると、コンパイラは変数名 (クラス名ではない) を削除し、名前とクラスの代わりにメモリ オフセットとメッセージを計算します。その上、ローカル変数として、それらがスコープの外に出るとすぐに (それらを作成した各関数の最後である可能性が高い)、すぐに破棄されます。

于 2013-06-01T15:15:05.307 に答える
0

いいえ、できません。

現代のコンパイラは、そのコードをコンパイルする前に、あなたの首を絞めようとします。

たとえコンパイラで動作させることができたとしても、2 つのオブジェクトが同じ名前を持っているからといって、それらが同じメモリ アドレスを持っているとは限りません。

于 2013-06-01T15:15:52.137 に答える