与指针和对象混淆(Objective-C)

与指针和对象混淆(Objective-C),objective-c,Objective C,作者写道,每当点的值改变时,myRect的原点的值也会改变,但我不明白如何将原点变成一个对象来修复它。创建对象和指针有什么区别 固定setOrigin方法: -(void) setOrigin:(XYpoint *)pt { if (! origin) origin = [[XYpoint alloc] init]; origin.x = pt.x; origin.y = pt.y; } XYPoint*原点是指向包含x和y的对象的指针。特别是在

作者写道,每当
的值改变时,
myRect的原点
的值也会改变,但我不明白如何将
原点
变成一个对象来修复它。创建对象和指针有什么区别

固定
setOrigin
方法:

-(void) setOrigin:(XYpoint *)pt {
    if (! origin)
        origin = [[XYpoint alloc] init];

    origin.x = pt.x;
    origin.y = pt.y;
}




XYPoint*原点
是指向包含
x
y
的对象的指针。特别是在本例中,您有两个指向同一确切对象的引用
myRect.origin
point
指向同一
XYpoint
对象。这意味着,如果您通过任何一种方式(
myRect.origin.x=1
point.x=1
)更改
x
y
的值,则无论以哪种方式访问(
myRect.origin
point
)时,都会更新
x
y
。。

我想您会感到困惑。。。整个过程都是用对象实现的(而且相当好)。指针只指向对象。另一种选择是什么,结构?
#import <Foundation/Foundation.h>

@interface XYPoint : NSObject 
@property int x, y;

@end
#import "XYpoint.h"

@implementation XYPoint
@synthesize x, y;

@end
#import <Foundation/Foundation.h>

@class XYPoint;
@interface Rectangle: NSObject

-(void) setOrigin: (XYPoint *) pt; 

@end
#import "Rectangle.h"
#import "XYpoint.h"

@implementation Rectangle {
    XYPoint *origin;
}

-(void) setOrigin:(XYPoint *)pt {
    origin = pt;
}

@end
#import "XYpoint.h"
#import "Rectangle.h"

int main (int argc, char *argv[]) {
    @autoreleasepool {
        Rectangle *myRect = [[Rectangle alloc] init];
        XYpoint *point = [[XYpoint alloc] init];

        point.x = 3;
        point.y = 8;

        [myRect setOrigin: point];
    }
    return 0;
}