Вопрос

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

Это было полезно?

Решение

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

@property float value;

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

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

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top