Установить переменную экземпляра объекта из другого объекта - PullRequest
0 голосов
/ 20 августа 2011

я учусь Цель 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 мы можем получить доступ к переменной экземпляра, используя оператор точки, если мы объявим как свойство. но здесь origin объявлен как переменная экземпляра в классе Rectangle. в основном классе мы получаем доступ к исходной переменной, используя точку. Я не знаю, как это работает. и rect.origin = my_pt строка вызывает метод setOrigin, как эта строка вызывает метод setOrgin. пожалуйста, объясните мне

1 Ответ

2 голосов
/ 20 августа 2011

Вы немного неправильно понимаете систему свойств Objective C.

a=obj.property;

строго эквивалентно вызову

a=[obj property];

и

obj.property = a;

строго эквивалентен вызову

[obj setProperty: a];

Вы должны подумать о @property NSObject*fooобъявления как объявление пары методов foo и setFoo: вместе со спецификацией семантики сохранения / освобождения.@synthesize foo - это реализация foo и setFoo:.Там нет ничего, кроме этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...