Estaba revisando las notas de la versión de Xcode 4.4 y noté esto:
Compilador LLVM 4.0
Xcode ahora incluye el compilador Apple LLVM versión 4.0, que incluye las siguientes características nuevas del lenguaje Objective-C: [...]
- Literales Objective-C: crea literales para NSArray, NSDictionary y NSNumber, igual que los literales para NSString
Estoy intrigado por esta característica. No está del todo claro para mí sólo cómo literales de NSString
trabajo y cómo se podría utilizar en NSArray
, NSDictionary
y NSNumber
.
¿Cuáles son los detalles?
objective-c
xcode
objective-c-literals
Pedro Mancheno
fuente
fuente
Respuestas:
Copiado textualmente de http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Literales de Objective-C: ahora se pueden crear literales para NSArray, NSDictionary y NSNumber (al igual que se pueden crear literales para NSString)
NSArray Literals
Previamente:
Ahora:
NSDictionary Literals
Previamente:
Ahora:
NSNumber Literals
Previamente:
Ahora:
[Editar]
zxoq en http://news.ycombinator.com/item?id=3672744 ha agregado nuevas suscripciones más interesantes. (Agregado con literales):
[Editar 2]
Los nuevos literales de ObjC se discutieron en varias sesiones de WWDC 2012 . Intencionalmente no eliminé los nombres de archivo y el tiempo de cada diapositiva para que pueda encontrarlos usted mismo si lo desea. Son esencialmente lo mismo que se indica en esta publicación, pero también hay algunas cosas nuevas que mencionaré arriba de las imágenes.
Tenga en cuenta que las imágenes son todas grandes. Simplemente arrástrelos a otra pestaña para verlos en su tamaño original
Esta parte es nueva. Literales de expresión
Cuando tienes una expresión (
M_PI / 16
por ejemplo) debes ponerla entre paréntesis.¡Esta sintaxis funciona para expresiones numéricas, booleanos, encontrar un índice en una cadena (C-), valores booleanos, constantes de enumeración e incluso cadenas de caracteres!
Más información sobre las cadenas de caracteres y cómo / cuándo puede usar esta sintaxis literal:
Cómo funcionan los literales de matriz
Cómo funcionan los literales del diccionario
Más información sobre la suscripción de matrices
Más información sobre la suscripción de diccionario
[Editar 3]
Mike Ash tiene una gran crítica sobre estos nuevos literales. Si quieres saber más sobre estas cosas, asegúrate de echarle un vistazo .
fuente
{
y[
, o son palabras genéricas comoarray
,id
y@implementation
. Las palabras clave relevantes sonliteral
,objc
yxcode
, no las menciones específicas de[
o@implementation
. No desea que esta pregunta se muestre para consultas generales de ObjC en Google, solo debe mostrarse cuando alguien realiza una consultaobjc literal
, lo que sucede en la actualidad (gracias al título y las etiquetas).El compilador de Objective-C tiene un conocimiento codificado del diseño de memoria de las instancias de la
NSConstantString
clase, también conocida como la__CFConstantString
clase. Echa un vistazo a laRewriteObjCStringLiteral
funciónlib/Rewrite/RewriteModernObjC.cpp
en el código fuente clang. El compilador simplemente emite datos que coinciden con el diseño de las instancias de laNSConstantString
clase.Hay un par de posibilidades para literales
NSArray
eNSDictionary
instancias. Podrían hacer algo como lo que hicieron para las cadenas literales: codificar el diseño de la instancia (para una subclase especial) en el compilador y emitir datos en ese diseño. O podrían hacer que el compilador emita un código que simplemente crea una instancia en tiempo de ejecución.fuente
NSArray
yNSDictionary
es bastante diferente a la deNSString
. El compilador simplemente genera una llamadaNSDictionary
oNSArray
en tiempo de ejecución. Esta es también la razón por la cual las variables globales no pueden inicializarse usando esta sintaxis (a diferencia deNSString
). Esto requeriría que el resultado sea una constante de tiempo de compilación.De "Objective-C Literals"
1)
NSNumber
,NSDictionary
y losNSArray
literales están disponibles en Xcode 4.4 .2)
NSDictionary
y laNSArray
suscripción requiere " Xcode 4.4 y OS X 10.8 o posterior SDK " o " Xcode 4.5 y iOS 6 o posterior SDK "Me parece que la suscripción requiere soporte de tiempo de ejecución y, por lo tanto, no funcionará antes de iOS6 .
fuente