В чем разница между @property и @synthesize? - PullRequest
3 голосов
/ 30 апреля 2009

Как я понимаю, @synthesize на самом деле генерирует геттеры и сеттеры. Но что тогда делает @property? Это просто настройка параметров для этой классной магической функции @synthesize?

Ответы [ 4 ]

9 голосов
/ 30 апреля 2009

@property объявляет имя как свойство. Это означает, что он будет доступен через синтаксис точки (object.value).

@synthetize можно рассматривать как макрос, который создает методы получения и установки. Полезно знать, что вы можете переопределить эти методы, даже если вы печатаете, на месте @synthetize.

8 голосов
/ 30 апреля 2009

Вы пишете @property в заголовочном файле

@property float value;

эквивалентно:

- (float)value; 
- (void)setValue:(float)newValue; 

Он получает информацию для ДРУГИХ классов, что у вашего класса есть эти методы

@ синтезировать физически СОЗДАТЬ эти методы в реализации класса

4 голосов
/ 30 апреля 2009

@property объявляет получатель и / или установщик

@synthesize реализует их.

1 голос
/ 14 июля 2014

Существует распространенное заблуждение, что директива @synthesize требуется для реализации сеттеров и геттеров, созданных с помощью директивы @property, но это не так. Использование директивы @property без @synthesize все равно будет генерировать сеттеры / геттеры и позволит вам использовать точечную нотацию. Однако, если пропустить директиву @synthesize, компилятор сгенерирует соответствующие переменные экземпляра с начальным символом подчеркивания, например, свойство myVar будет иметь переменную экземпляра _myVar.

Использование начального подчеркивания - это общее соглашение, которое позволяет различать свойства и переменные экземпляра. Также свойства и переменные экземпляра обычно имеют одно и то же имя, что по умолчанию делает @synthesize.

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