Вопрос

Я изучаю 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 декларация.

Другие советы

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

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

Кроме того, если его увидеть перед строковым литералом, он создает NSString, а не 'char *' в C.

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

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

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

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

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

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

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top