2012-06-16 180 views
0

作者写道,只要point的值发生变化,值myRect's origin也会改变,但我不明白如何将origin转换为对象修复它。创建对象和指针有什么区别?指针和对象混淆(Objective-C)

固定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; 
} 
+3

我觉得你很困惑......这整个事情是用对象来实现的(并且相当好)。指针仅仅指向对象。有什么选择,一个结构? – CodaFi

回答

2

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