Eu estava examinando as notas de versão do Xcode 4.4 e percebi o seguinte:
Compilador LLVM 4.0
O Xcode agora inclui o Apple LLVM Compiler versão 4.0, incluindo os seguintes recursos da linguagem newObjective-C: [...]
- literais de Objective-C: criam literais para NSArray, NSDictionary e NSNumber, exatamente como os literais para NSString.
Estou intrigado com esse recurso. Não é totalmente claro para mim o quão literais para NSString
o trabalho e como se poderia usá-los em NSArray
, NSDictionary
e NSNumber
.
Quais são os detalhes?
objective-c
xcode
objective-c-literals
Pedro Mancheno
fonte
fonte
Respostas:
Copiado literalmente de http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Literais Objective-C: agora é possível criar literais para NSArray, NSDictionary e NSNumber (assim como se pode criar literais para NSString)
NSArray Literals
Anteriormente:
Agora:
Literais do NSDictionary
Anteriormente:
Agora:
Literais NSNumber
Anteriormente:
Agora:
[Editar]
O zxoq em http://news.ycombinator.com/item?id=3672744 adicionou uma nova inscrição mais interessante. (Adicionado com literais):
[Editar 2]
Os novos literais da ObjC foram discutidos em várias sessões da WWDC 2012 . Intencionalmente, não removi os nomes dos arquivos e a hora de cada slide, para que você possa encontrá-los por conta própria, se quiser. Eles são essencialmente a mesma coisa que afirmamos neste post, mas também há algumas coisas novas que mencionarei acima das imagens.
Observe que as imagens são todas grandes. Basta arrastá-los para outra guia para visualizá-los no tamanho original
Esta parte é nova. Literais de Expressão
Quando você tem uma expressão (
M_PI / 16
por exemplo), deve colocá-la entre parênteses.Essa sintaxe funciona para expressões numéricas, booleanos, localizando um índice em uma string (C-), valores booleanos, constantes enum e até strings de caracteres!
Mais sobre cadeias de caracteres e como / quando você pode usar esta sintaxe literal:
Como literais de matriz funcionam
Como os literais do dicionário funcionam
Mais sobre assinatura de array
Mais sobre subscrição de dicionário
[Editar 3]
Mike Ash tem um ótimo artigo sobre esses novos literais. Se você quiser saber mais sobre esse material, verifique .
fonte
{
e[
, ou são palavras genéricas comoarray
,id
e@implementation
. As palavras-chave relevantes sãoliteral
,objc
excode
não as menções específicas de[
ou@implementation
. Você não deseja que essa pergunta apareça para consultas gerais sobre ObjC no Google, ela deve ser exibida apenas quando alguém fizer uma consultaobjc literal
, o que acontece no momento (graças ao título e às tags).O compilador Objective-C codificou o conhecimento do layout de memória das instâncias da
NSConstantString
classe, também conhecida como__CFConstantString
classe. Confira aRewriteObjCStringLiteral
função nolib/Rewrite/RewriteModernObjC.cpp
código-fonte do clang. O compilador simplesmente emite dados que correspondem ao layout das instâncias doNSConstantString
classe.Existem algumas possibilidades para literais
NSArray
eNSDictionary
instâncias. Eles poderiam fazer algo parecido com o que fizeram para seqüências de caracteres literais - codificar o layout da instância (para uma subclasse especial) no compilador e emitir dados nesse layout. Ou eles podem fazer o compilador emitir um código que simplesmente cria uma instância em tempo de execução.fonte
NSArray
eNSDictionary
é bem diferente da deNSString
. O compilador simplesmente gera uma chamada paraNSDictionary
ouNSArray
em tempo de execução. É também por isso que variáveis globais não podem ser inicializadas usando esta sintaxe (diferenteNSString
). Isso exigiria que o resultado fosse uma constante de tempo de compilação.Dos literais de Objective-C
1)
NSNumber
,NSDictionary
eNSArray
literais estão disponíveis em Xcode 4,4 .2)
NSDictionary
e aNSArray
assinatura precisa do " Xcode 4.4 e OS X 10.8 ou posterior SDK " ou " Xcode 4.5 e iOS 6 ou posterior SDK "Parece-me que a assinatura precisa de suporte de tempo de execução e, portanto, não funcionará antes do iOS6 .
fonte