Я - новая Задача C. Я пытаюсь понять и отработать проблемы из Программирования Стивена Кочана в Задаче c 2.0.Эта проблема из главы 8.
Что я не понимаю, так это: почему я не могу назначить значения переменных напрямую, когда я могу их получить.
Например:
Это не дает мне ошибку или предупреждение.Но он также не устанавливает значения X и Y.
go.origin.x = 300;
go.origin.y = 100;
Но это прекрасно работает и дает мне ожидаемый результат:
NSLog (@"print %i, %i", go.origin.x, go.origin.y);
Вот мой XYPoint.h
#import <Foundation/Foundation.h>
@interface XYPoint : NSObject {
int _x;
int _y;
}
@property int x;
@property int y;
@end
XYPoint.m
#import "XYPoint.h"
@implementation XYPoint
@synthesize x = _x;
@synthesize y = _y;
@end
GraphicObject.h
#import <Foundation/Foundation.h>
#import "XYPoint.h"
@interface GraphicObject : NSObject {
XYPoint *_origin;
}
@property (nonatomic, retain) XYPoint *origin;
-(void) setOrigin : (XYPoint *) pt;
@end
GraphicObject.m
#import "GraphicObject.h"
@implementation GraphicObject
@synthesize origin = _origin;
-(void) setOrigin : (XYPoint *) pt {
_origin = [[XYPoint alloc] init];
_origin = pt;
//_origin.x = pt.x;
//_origin.y = pt.y;
}
@end
Также, если не хотитемои origin.x и origin.y должны быть изменены при изменении xypoint x и y, почему я должен это сделать:
_origin.x = pt.x;
_origin.y = pt.y;
и почему бы просто:
_origin = pt;
Например, в main файле:
XYPoint *myPoint = [[XYPoint alloc] init];
go.origin = myPoint;
myPoint.x = 250;
myPoint.y = 50;
NSLog(@"Origin values %i, %i", go.origin.x, go.origin.y);
myPoint.x = 100;
myPoint.y = 10;
NSLog(@"Origin values %i, %i", go.origin.x, go.origin.y);
Я понимаю, что значения происхождения не меняются.Но нужно ли мне в методе setOrigin: назначать его следующим образом:
_origin.x = pt.x
и не так:
_origin = pt;
Спасибо всем.Я знаю, что это длинный вопрос.Я действительно пытался понять и также смотрел во многих местах, но я даже не знаю, что искать.Как вы называете это назначение?