Символ @
не используется в идентификаторах C или C ++, поэтому он используется для введения ключевых слов языка Objective-C таким образом, чтобы они не конфликтовали с ключевыми словами других языков. Это позволяет «целевой» части языка свободно смешиваться с частью C или C ++.
Таким образом, за очень немногими исключениями, каждый раз, когда вы видите @
в некотором коде Objective C, вы смотрите на конструкции Objective C, а не на C или C ++.
Основными исключениями являются id
, Class
, nil
и Nil
, которые обычно обрабатываются как ключевые слова языка, даже если за ними также могут стоять typedef
или #define
. Например, компилятор действительно обрабатывает id
специально с точки зрения правил преобразования типов указателей, которые он применяет к объявлениям, а также к решению о том, генерировать ли барьеры записи GC.
Другие исключения: in
, out
, inout
, oneway
, byref
и bycopy
; они используются в качестве аннотаций класса хранения для параметра метода и возвращаемых типов, чтобы сделать распределенные объекты более эффективными. (Они становятся частью сигнатуры метода, доступной во время выполнения, и DO может посмотреть, как определить, как лучше сериализовать транзакцию.) В объявлениях @property
, copy
, retain
, assign
есть атрибуты readonly
, readwrite
, nonatomic
, getter
и setter
; они действительны только в разделе атрибутов объявления @property
.