したがって、carIdというプロパティintを持つCARという単純なクラスがあります。
このようなクラスの複数のインスタンスを作成しようとすると、次のようになります。
Car *car = [[Car alloc] init];
car.carId = 1;
Car *car = [[Car alloc] init];
car.carId = 2;
それは機能しません、私は理解しています。
しかし、私がそうするなら:
for (int i = 0; i < 10 ; i++) {
Car *car = [[Car alloc] init];
car.carId = i;
}
できます。それ、理由がわかりません。
誰かが理由を説明することができますか?ありがとう!
{ ... }
コードの各ブロックは、変数を宣言できるスコープと呼ばれる「コンテキスト」を作成します。同じコンテキストまたは親コンテキストに同じ変数を2回持つことはできません(変数は子に継承されます)。明らかな理由で、そうでなければコンパイラはあなたが話しているものを理解することができません)。
に:
for (int i = 0; i < 10 ; i++) {
Car *car = [[Car alloc] init];
car.carId = i;
}
car
コンテキストで呼び出される変数は1つだけです。
に:
Car *car = [[Car alloc] init];
car.carId = 1;
Car *car = [[Car alloc] init];
car.carId = 2;
あなたは2つ持っています。次のように変更した場合:
Car *car1 = [[Car alloc] init];
car1.carId = 1;
Car *car2 = [[Car alloc] init];
car2.carId = 2;
できます。
または、その変数を再利用することもできます(ただし、どこかに保存しない限り、最初の変数への参照は失われます)。
Car *car = [[Car alloc] init]; // First car
car.carId = 1;
car = [[Car alloc] init]; // Second car, but now you just lost the first car reference unless you added it to a collection or something.
car.carId = 2;
これを実行して2つのコンテキストを作成することもできますが、その場合、変数はそれらのコンテキストの外部(つまり、親コンテキスト)では使用できません。
{
Car *car = [[Car alloc] init];
car.carId = 1;
}
{
Car *car = [[Car alloc] init];
car.carId = 2;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加