Я изучаю 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: символ @ , причина, по которой он стоит перед различными ключевыми словами:
Кроме того, если смотреть перед строковым литералом, он создает NSString, а не char * в C.
источник
Из Macrumors: Objective-C Tutorial , когда перед строковым литералом:
@ Также добавляет поддержку Unicode в строки C.
источник
+[NSString stringWithUTF8String:]
(они выделяются динамически), а освобождение и сохранение не влияют на них.Из руководства :
источник
@
используется. Я смотрю на код так:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... ничего общего с NSString