Я просматривал заметки о выпуске для Xcode 4.4 и заметил это:
Компилятор LLVM 4.0
Xcode теперь включает в себя Apple LLVM Compiler версии 4.0, включая следующие новые функции языка
Objective-C : [...] - Литералы Objective-C: создают литералы для NSArray, NSDictionary и NSNumber, точно так же, как литералы для NSString
Я заинтригован об этой функции. Мне не совсем понятно, как литералы для NSString
работы и как их использовать NSArray
, NSDictionary
и NSNumber
.
Какие детали?
objective-c
xcode
objective-c-literals
Педро Манчено
источник
источник
Ответы:
Дословно скопировано с http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Литералы Objective C: теперь можно создавать литералы для NSArray, NSDictionary и NSNumber (точно так же, как можно создавать литералы для NSString)
NSArray Литералы
Ранее:
Сейчас:
NSDictionary Литералы
Ранее:
Сейчас:
NSNumber Литералы
Ранее:
Сейчас:
[Редактировать]
zxoq на http://news.ycombinator.com/item?id=3672744 добавил более интересные новые подписки. (Добавлено с литералами):
[Редактировать 2]
Новые литералы ObjC обсуждались на нескольких сессиях WWDC 2012 . Я специально не удалил имена файлов и время каждого слайда, чтобы вы могли найти их сами, если захотите. По сути, это то же самое, что указано в этом посте, но есть также несколько новых вещей, которые я упомяну над изображениями.
Обратите внимание, что изображения все большие. Просто перетащите их на другую вкладку, чтобы просмотреть их в исходном размере
Эта часть новая. Выражение Литералы
Если у вас есть выражение (
M_PI / 16
например), вы должны поместить его в круглые скобки.Этот синтаксис работает для числовых выражений, логических выражений, поиска индекса в строке (C-), логических значений, констант enum и даже символьных строк!
Подробнее о символьных строках и о том, как / когда вы можете использовать этот буквальный синтаксис:
Как работают массивы литералов
Как работают словарные литералы
Подробнее о подписке на массив
Подробнее о подписке на словарь
[Редактировать 3]
У Майка Эша есть отличная рецензия на эти новые литералы. Если вы хотите узнать больше об этом материале, не забудьте проверить это .
источник
{
и[
, или общие слова , какarray
,id
и@implementation
. Соответствующие ключевые словаliteral
,objc
аxcode
не конкретные упоминания[
или@implementation
. Вы не хотите, чтобы этот вопрос отображался для общих запросов ObjC в Google, он должен отображаться только тогда, когда кто-то запрашиваетobjc literal
, что происходит в настоящее время (благодаря заголовку и тегам).Компилятор Objective-C обладает жестко запрограммированным знанием расположения в памяти экземпляров
NSConstantString
класса, или__CFConstantString
класса. ПроверьтеRewriteObjCStringLiteral
функциюlib/Rewrite/RewriteModernObjC.cpp
в исходном коде Clang. Компилятор просто выдает данные, которые соответствуют расположению экземпляровNSConstantString
класса.Есть несколько возможностей для литерала
NSArray
иNSDictionary
экземпляров. Они могли бы сделать что-то вроде того, что они сделали для буквенных строк - жестко закодировать макет экземпляра (для специального подкласса) в компиляторе и выдать данные в этом макете. Или они могут иметь код, генерирующий компилятор, который просто создает экземпляр во время выполнения.источник
NSArray
иNSDictionary
совсем не похожа на реализациюNSString
. Компилятор просто генерирует вызовNSDictionary
илиNSArray
во время выполнения. Именно поэтому глобальные переменные не могут быть инициализированы с использованием этого синтаксиса (в отличие отNSString
). Это потребовало бы, чтобы результат был постоянной времени компиляции.Из «Литералы Objective-C»
1)
NSNumber
,NSDictionary
иNSArray
литералы доступны в Xcode 4.4 .2)
NSDictionary
и дляNSArray
подписки требуется " Xcode 4.4 и OS X 10.8 или более поздняя версия SDK " или " Xcode 4.5 и iOS 6 или более поздняя версия SDK "Похоже, подписчик нуждается в поддержке во время выполнения и, следовательно, не будет работать до iOS6 .
источник