从另一个对象设置对象的实例变量

时间:2011-08-20 06:36:34

标签: objective-c

我正在学习目标C.在这里,我想出了一个我不理解的问题,请给出解决方案。

XYPoint.h file

//header file
@interface XYPoint:NSObject
{
int x;
int y;
}

@property int x,y;

-(void) setX:(int ) d_x setY:(int )d_y;

// implementation file XYPoint.m
@synthesize x,y; 
-(void) setX:(int ) d_x setY:(int ) d_y
{
 x=d_x;
 y=d_y;
} 

//Rectangle.h file
@class XYPoint;
@Interface Rectangle:NSObject
{
 int width,height;
 XYPoint *origin;
}

@property int width,height;
-(XYPoint *)origin;
-(void) setOrigin:(XYPoint*)pt;

//at implementation Rectangle.m file
@synthesize width,height;

-(XYPoint *)origin
{
 return origin;
}

-(void) setOrigin:(XYPoint*)pt
{
 origin=pt;
}


//in main
#import "Rectangle.h"
#import "XYPoint.h"

int main(int argc,char *argv[])
{
Rectangle *rect=[[Rectangle alloc] init];
XYPoint *my_pt=[[XYPoint alloc] init];

[my_pt setX:50 setY:50];
rect.origin=my_pt;  // how is this possible
return 0;
}

在目标c中,如果我们声明为属性,我们可以使用点运算符访问实例变量。但这里的原点在Rectangle类中声明为实例变量。在主类中,我们使用dot访问origin变量。我不知道它是如何工作的。而rect.origin = my_pt行调用setOrigin方法如何调用setOrgin方法。请解释我

1 个答案:

答案 0 :(得分:2)

您稍微误解了Objective-C属性系统。

a=obj.property;

严格等同于来电

a=[obj property];

obj.property =一个;

严格等同于来电

[obj setProperty:a];

您应该将@property NSObject*foo声明视为一对方法foosetFoo:的声明,以及保留/释放语义的规范。 @synthesize foo就是foosetFoo:的实施。没有什么比这更好的了。