Символ "@" интерпретируется компилятором как директива. Это одно из дополнений Objective-C к языку C. Когда вы объявляете @property, а затем @synthesize, вы указываете компилятору создать для вас инструкции и соответствующие символы для методов получения и установки. Помните, что на языке Си оператор «=» означает «назначить». Большую часть времени в контексте ОО, предоставляемого расширениями Objective-C, мы работаем с указателями (или ссылками) на структуры данных isa (классы в Objective-C).
До Objective-C 2.0 все методы получения и установки должны были кодироваться разработчиком для каждого атрибута, который в большинстве случаев представлял собой код копирования / вставки. Для полной совместимости с KVC / KVO требуется много очень утомительного кода ... операторы willAccessValueForKey, didUpdateValueForKey и т. Д., Которые новый компилятор добавляет для вас автоматически, когда вы используете синтаксис @ property / @ syntheize. Это огромный прирост производительности для разработчиков. Синтаксическая точка дополнения к языку немного более спорным в сообществе, как это скрывает магия компилятор делает на вас от имени интерпретировать object.property = anotherObject.property;
заявление как [object setProperty:[anotherObject property]];
1011 *
Из документации Apple, на которую есть ссылки в других ответах
Атрибуты объявления свойства
Вы можете украсить свойство атрибутами, используя форму @property (attribute [, attribute2, ...]). Как и методы, свойства ограничиваются объявлением интерфейса. Для объявлений свойств, в которых используется список имен переменных, разделенных запятыми, атрибуты свойств применяются ко всем именованным свойствам.
Если вы используете директиву @synthesize, чтобы сообщить компилятору о создании метода (ов) доступа, генерируемый им код соответствует спецификации, заданной ключевыми словами. Если вы реализуете метод доступа (методов) самостоятельно, вы должны убедиться, что он соответствует спецификации (например, если вы указываете copy, вы должны обязательно скопировать входное значение в методе setter).