2012-01-11 2 views
4

Я просто изучаю ООП из книги, которую я взял (Big Nerd Ranch), и она просто прошла через геттер и сеттер. Я просто хотел бы уточнить, я понимаю, что я только что сделал. Вместо того, чтобы создавать метод для установки значения экземпляра, а затем другой метод для извлечения значения и отображения его, я создаю с помощью синтаксиса и @synthesize для определения обоих методов.Геттер и сеттер объяснены?

Вместо того, чтобы сделать это:

-(void) setHeightOfObject:(int)h; 
-(void) setWeightOfObject:(float)w; 
-(int) heightOfObject; 
-(float) weightOfObject; 

и определив его как это:

- (int)heightOfObject 
{ 
    return heightOfObject; 
} 

- (void)setHeightOfObject:(int)h 
{ 
    heightInMeters = h; 
} 

- (float)weightOfObject 
{ 
    return weightOfObject; 
} 

- (void)setWeightOfObject:(float)w 
{ 
    weightOfObject = w; 
} 

Я хотел бы сделать это с геттер и сеттеров в файле .h:

@property int heightOfObject; 
@property float weightOfObject; 

Затем перейдите в мой файл .m и поместите его:

@synthesize heightInMeters, weightOfObject; 

Это дает мне возможность установить значение моего объекта, а затем получить его, если мне нужно его распечатать? Я знаю, что это важная концепция, и я хочу убедиться, что я правильно ее понимаю.

ответ

3

Вы правы. Значение @synthesize существенно расширилось до реализации, которую вы написали во время компиляции.

С момента написания геттеров и сеттеров скучно и многократно (и у большинства объектов есть куча свойств, для которых вы хотели бы получить геттеры и сеттеры), имея этот небольшой ярлык, вы тратите меньше времени на boilerplate code и больше времени на реализацию чего-то интересного.

Если вы хотите получить более подробную информацию об объектах-c, вы можете посмотреть на programming guide (хотя на данном этапе это может быть излишне детализировано).

+0

Удивительно, я проверю ссылку позже в своем путешествии по программированию – David

0

Имущество и синтез были введены в Objective C 2.0, чтобы обеспечить простой способ создания геттеров и сеттеров.

Проверить эту ссылку, это будет помощь:

http://cocoacast.com/?q=node/103

0

Вы получаете не только добытчиками и сеттеров. Вы также получаете чистый синтаксис: self.heightOfObject, который вы можете назначить или прочитать. @property имеет множество настроек, хотя вы можете прочитать их подробнее. В частности, вы можете контролировать, нужен ли вам как доступ на чтение, так и запись, или только один из них.

1

Есть две части, к которой вы достигаете, используя @property и @synthesize.

@property сообщает компилятору, что он должен позволить вам использовать точечный синтаксис для вызова аксессуаров heightOfObject и weightOfObject. Так делаю этот

int height = myObject.heightOfObject; 
myObject.weightOfObject = 10; 

становится правовым кодексом и в точности эквивалентно следующему:

int height = [myObject heightOfObject]; 
[myObject setWeightOfObject:10]; 

Вы можете использовать @property без @synthesize, в этом случае вы должны реализовать аксессор точно так, как вы сделали в ваш вопрос.

Использование @synthesize сообщает компилятору, что он должен генерировать аксессуры для вас, и он также будет генерировать сами переменные экземпляра, если его поддерживает время выполнения (например, на iOS и 64-разрядной ОС X).

+0

Спасибо, это было то, что я хотел знать. – David

Смежные вопросы