作者写道,每当point
的值发生变化时,myRect's origin
的值也会发生变化,但我不明白如何将origin
转换为对象来修复它。创建对象和指针有什么区别?
修正了setOrigin
方法:
-(void) setOrigin:(XYpoint *)pt {
if (! origin)
origin = [[XYpoint alloc] init];
origin.x = pt.x;
origin.y = pt.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;
}
答案 0 :(得分:2)
XYPoint *origin;
是指向包含x
和y
的对象的指针。在这种情况下,特别是有两个引用指向同一个确切的对象。 myRect.origin
和point
指向同一个XYpoint
对象。这意味着,如果您通过任何方式(x
或y
)更改myRect.origin.x = 1
或point.x = 1
的值,则更新x
和{{1}将以任一方式访问(y
或myRect.origin
)。