Я вивчаю aim-c і продовжую натикатися на символ @. Він використовується в різних сценаріях, наприклад, на початку рядка або для синтезу методів аксесуарів.
Що означає символ @ у об’єкті-c?
Я вивчаю aim-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 несе відповідальність за повернення компілятора в звичайний режим C, коли він виявить кінець коду Objective-C).
Також, якщо його побачити перед літеральним рядком, він робить NSString, а не 'char *' у C.
З Macrumors: Підручник Objective-C , коли перед літеральним рядком:
Є також "" "NSString літерали. Це по суті скорочення для методу + stringWithUTF8String NSString.
@ Також додає підтримку 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),