Что символ @ представляет в target-c?

Я изучаю цель-c и продолжаю сталкиваться с символом @. Он используется в различных сценариях, например, в начале строки или для синтеза методов доступа.

Что символ @ означает в target-c?

25.08.2008 07:57:59
почему @ используется до @interface и @end?
Lalit Kumar 22.07.2015 08:02:05
4 ОТВЕТА
РЕШЕНИЕ

Символ @не используется в идентификаторах 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объявления.

157
25.08.2008 08:36:29
Можете ли вы объяснить, что делает @ (выражение)? Это единственный элемент, который я не понимаю во всплывающем окне, отображаемом при вводе @ в xcode.
jchnxu 28.07.2014 13:57:58
@ (99) совпадает с [NSNumber numberWithInteger: 99]. @ (ДА) совпадает с [NSNumber numberWithBool: ДА]. Знак @ является ярлыком для создания объектов.
JoJo 30.09.2015 15:32:44
Кто-то еще смущен тем фактом, что этот «ответ» на самом деле не отвечает на поставленный вопрос? Аскер говорит: «Что означает« @ »в Objective-C?» и отвечающий говорит: «Это означает, что вы используете Objective-C». Я думаю, он уже знал столько же ...
Jon McClung 23.08.2018 13:44:53
Вроде произвольно; он должен был быть в базовом наборе ASCII и не использовался C на момент написания первого препроцессора Objective-C. Вот почему это так @.
Chris Hanson 9.04.2019 05:33:52
Джон МакКлюнг: Лев прав, нет более глубокого смысла. @C не использовал этот символ, поэтому это был удобный «аварийный штрих» для альтернативного анализа, который также сохранял 100% -ную совместимость с существующим кодом C.
Chris Hanson 9.04.2019 05:36:31

Из учебника Objective-C: символ @ , причина, по которой он находится на передней панели различных ключевых слов:

Использование @ должно облегчить привязку компилятора Objective-C к существующему компилятору C. Поскольку символ @ недопустим в любом контексте C, кроме строкового литерала, токенайзер (ранний и простой шаг в компиляторе) можно изменить, чтобы просто искать символ @ вне строковой константы (токенизатор понимает строковые литералы так что в состоянии это различить). Когда встречается @, токенизатор переводит оставшуюся часть компилятора в режим Objective-C. (Парсер Objective C будет отвечать за возвращение компилятора обратно в обычный режим C, когда он обнаруживает конец кода Objective C).

Также, если смотреть перед строковым литералом, он делает NSString, а не 'char *' в C.

62
25.08.2008 08:10:15

Из Macrumors: Objective-C Tutorial , когда перед строковым литералом:

Есть также @ "" литералы NSString. По сути, это сокращение для метода NSString + stringWithUTF8String.

@ Также добавляет поддержку юникода в строки C.

24
11.01.2009 15:27:28
«По сути, это сокращение для метода NSString + stringWithUTF8String». Ну, не совсем так. Строки размещаются статически, что делает их отличными от +[NSString stringWithUTF8String:](они выделяются динамически), и освобождение и сохранение не влияют на них.
user142019 31.10.2011 19:27:37

Из руководства :

Фреймворки Objective-C обычно не используют строки в стиле C. Вместо этого они передают строки как объекты NSString.

Класс NSString предоставляет объектную оболочку для строк, обладающую всеми ожидаемыми преимуществами, включая встроенное управление памятью для хранения строк произвольной длины, поддержку Unicode, утилиты форматирования в стиле printf и многое другое. Поскольку такие строки обычно используются, Objective-C предоставляет сокращенную запись для создания объектов NSString из постоянных значений. Чтобы использовать этот сокращенный вариант, все, что вам нужно сделать, это поставить перед обычной строкой в ​​двойных кавычках символ @, как показано в следующих примерах:

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
15
10.02.2012 05:38:42
Но это только один пример того, где @используется. Я смотрю на такой код: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... ничего общего с NSString
GreenAsJade 3.01.2017 04:37:39