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

时间:2012-06-16 14:56:50

标签: objective-c

作者写道,每当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;
}

1 个答案:

答案 0 :(得分:2)

XYPoint *origin;是指向包含xy的对象的指针。在这种情况下,特别是有两个引用指向同一个确切的对象。 myRect.originpoint指向同一个XYpoint对象。这意味着,如果您通过任何方式(xy)更改myRect.origin.x = 1point.x = 1的值,则更新x和{{1}将以任一方式访问(ymyRect.origin)。