Я изучаю objective-c и все время натыкаюсь на символ @. Он используется в разных сценариях, например, в начале строки или для синтеза методов доступа.
Что означает символ @ в objective-c?
Я изучаю objective-c и все время натыкаюсь на символ @. Он используется в разных сценариях, например, в начале строки или для синтеза методов доступа.
Что означает символ @ в objective-c?
Ответы:
Этот @
символ не используется в идентификаторах 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
объявления.
@
.
@
C не использовался, поэтому это был удобный «выход» для альтернативного синтаксического анализа, который также сохранял 100% совместимость с существующим кодом C.
Из учебника Objective-C: символ @ , причина, по которой он стоит перед различными ключевыми словами:
Использование @ должно упростить привязку компилятора Objective-C к существующему компилятору C. Поскольку @ недействителен ни в каком контексте в C, кроме строкового литерала, токенизатор (ранний и простой шаг в компиляторе) можно изменить, чтобы просто искать символ @ вне строковой константы (токенизатор понимает строковые литералы , поэтому он может это различить). Когда встречается @, токенизатор переводит остальную часть компилятора в «режим Objective-C». (Парсер Objective-C будет отвечать за возврат компилятора в обычный режим C, когда он обнаруживает конец кода Objective-C).
Кроме того, если смотреть перед строковым литералом, он создает NSString, а не char * в C.
Из Macrumors: Objective-C Tutorial , когда перед строковым литералом:
Есть также литералы @ "" NSString. По сути, это сокращение от метода NSString + stringWithUTF8String.
@ Также добавляет поддержку Unicode в строки C.
Из руководства :
Фреймворки Objective-C обычно не используют строки в стиле C. Вместо этого они передают строки как объекты NSString.
Класс NSString предоставляет объектную оболочку для строк, обладающую всеми ожидаемыми преимуществами, включая встроенное управление памятью для хранения строк произвольной длины, поддержку Unicode, утилит форматирования в стиле printf и многое другое. Поскольку такие строки используются обычно, Objective-C предоставляет сокращенную нотацию для создания объектов NSString из постоянных значений. Чтобы использовать это сокращение, все, что вам нужно сделать, это поставить перед обычной строкой в двойных кавычках символ @, как показано в следующих примерах:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@
используется. Я смотрю на код так: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... ничего общего с NSString