Objective-cの「コピー」について質問があります。Car.mでの私の機能は次のようになります。
- (id) copyWithZone: (NSZone *) zone
{
Car *carCopy;
carCopy = [[[self class] allocWithZone: zone] init];
carCopy.name = self.name; //not [name copy]
return (carCopy);
} // copyWithZone
int main.m:
Car *car = [[Car alloc] init];
car.name = @"abc";
Car *copyCar = [car copy];
[copyCar print];
car.name = @"123";
[copyCar print];
プロパティ名の場合、carとcopyCarの両方が同じNSStringオブジェクトを指していると思うので、 "car.name = @" 123 ""を実行すると、copyCar.nameも変更する必要があります。しかし、コードのようにcopyCarを2回印刷すると、どちらも名前を「abc」として印刷します。なぜ浅いコピーではないのか知りたいですか?