我正在学习目标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方法。请解释我
答案 0 :(得分:2)
您稍微误解了Objective-C属性系统。
a=obj.property;
严格等同于来电
a=[obj property];
和
obj.property =一个;
严格等同于来电
[obj setProperty:a];
您应该将@property NSObject*foo
声明视为一对方法foo
和setFoo:
的声明,以及保留/释放语义的规范。 @synthesize foo
就是foo
和setFoo:
的实施。没有什么比这更好的了。