0

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;
}
4

1 に答える 1

2

XYPoint *origin;xとを含むオブジェクトへのポインタyです。特にこの場合、まったく同じオブジェクトを指す 2 つの参照があります。同じオブジェクトmyRect.originpoint指します。これが意味することは、 orXYpointの値をいずれかの方法 (または) で変更すると、いずれかの方法 (または)でアクセスしたときにandが更新されるということです。xymyRect.origin.x = 1point.x = 1xymyRect.originpoint

于 2012-06-16T15:04:42.123 に答える