这是非常基本的,但是当我这样做时,我不明白为什么:
int main(int argc, const char * argv[]) {
@autoreleasepool {
Rectangle *myRect = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
[myPoint setX:100 andY:200];
[myRect setWidth:5 andHeigth:8];
myRect.origin = myPoint;
NSLog(@"Origin at (%i, %i)", myRect.origin.x, myRect.origin.y);
[myPoint setX:50 andY:50];
NSLog(@"Origin at (%i, %i)", myRect.origin.x, myRect.origin.y);
XYPoint *theOrigin = myRect.origin;
theOrigin.x = 200;
theOrigin.y = 300;
NSLog(@"Origin at (%i, %i)", myRect.origin.x, myRect.origin.y);
}
return 0;
}
我的矩形的原点发生了变化。这是输出:
Origin at (100, 200)
Origin at (100, 200)
Origin at (200, 300)
Program ended with exit code: 0
但如果我做了类似的事情:
int a, b;
a = 5;
b = 6;
b = a;
a的值将保持为5,b将变为6。
我认为等号右侧的值永远不会改变,但是设置等号左侧的值。那么为什么我这样做:
XYPoint *theOrigin = myRect.origin;
theOrigin.x = 200;
theOrigin.y = 300;
为什么myRect.origin的值会发生变化? theOrigin是一个指针,为什么更改指针的值会改变它指向的对象(myRect)?我的书中说“回报价值很脆弱”。那是什么意思?如果我想在方法myRect.origin中复制,那么通过执行:
XYPoint *theOrigin = myRect.origin;
theOrigin.x = 200;
theOrigin.y = 300;
myRect.origin的值不会改变?
答案 0 :(得分:0)
“myRect.origin的值会改变吗?”
是的,因为您正在修改同一个对象。 XYPoint *theOrigin
是一个指向对象的指针,它指向与myRect.origin
相同的对象(它也是一个指针。)我建议你阅读一些关于指针的内容,这将有助于你理解这种行为。 (别担心,指针本身很简单。)