2012-06-16 98 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會。