Что символ @ представляет в target-c? - PullRequest
136 голосов
/ 25 августа 2008

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

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

Ответы [ 4 ]

155 голосов
/ 25 августа 2008

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

60 голосов
/ 25 августа 2008

С Objective-C Tutorial: символ @ , причина, по которой он стоит перед различными ключевыми словами:

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

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

24 голосов
/ 11 января 2009

С Макруморы: Objective-C Tutorial , когда перед строковым литералом:

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

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

12 голосов
/ 02 февраля 2012

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

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

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

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...