Je parcourais les notes de publication de Xcode 4.4 et j'ai remarqué ceci:
Compilateur LLVM 4.0
Xcode inclut désormais le compilateur Apple LLVM version 4.0, y compris les nouvelles fonctionnalités du langage Objective-C suivantes: [...]
- Littéraux Objective-C: créez des littéraux pour NSArray, NSDictionary et NSNumber, tout comme les littéraux pour NSString
Je suis intrigué par cette fonctionnalité. Il est pas tout à fait clair pour moi à quel point littéraux pour le NSString
travail et la façon dont on pourrait les utiliser sur NSArray
, NSDictionary
et NSNumber
.
Quels sont les détails?
objective-c
xcode
objective-c-literals
Pedro Mancheno
la source
la source
Réponses:
Copié textuellement de http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Objective-C littéraux: on peut maintenant créer des littéraux pour NSArray, NSDictionary et NSNumber (tout comme on peut créer des littéraux pour NSString)
Littéraux NSArray
Précédemment:
Maintenant:
Littéraux NSDictionary
Précédemment:
Maintenant:
Littéraux NSNumber
Précédemment:
Maintenant:
[Éditer]
zxoq à http://news.ycombinator.com/item?id=3672744 a ajouté un nouvel indice plus intéressant. (Ajouté avec des littéraux):
[Modifier 2]
Les nouveaux littéraux ObjC ont été discutés lors de plusieurs sessions WWDC 2012 . Je n'ai pas supprimé intentionnellement les noms de fichiers et l'heure de chaque diapositive afin que vous puissiez les trouver par vous-même si vous le souhaitez. Ils sont essentiellement la même chose que celle indiquée dans cet article, mais il y a aussi quelques nouvelles choses que je mentionnerai au-dessus des images.
Veuillez noter que les images sont toutes grandes. Faites-les simplement glisser dans un autre onglet pour les afficher dans leur taille d'origine
Cette partie est nouvelle. Littéraux d'expression
Lorsque vous avez une expression (
M_PI / 16
par exemple), vous devez la mettre entre parenthèses.Cette syntaxe fonctionne pour les expressions numériques, les booléens, la recherche d'un index dans une chaîne (C-), les valeurs booléennes, les constantes d'énumération et même les chaînes de caractères!
En savoir plus sur les chaînes de caractères et comment / quand vous pouvez utiliser cette syntaxe littérale:
Fonctionnement des littéraux de tableau
Comment fonctionnent les littéraux de dictionnaire
En savoir plus sur l'indice de tableau
En savoir plus sur l'indexation du dictionnaire
[Modifier 3]
Mike Ash a un excellent article sur ces nouveaux littéraux. Si vous voulez en savoir plus sur ce sujet, assurez-vous de le vérifier .
la source
{
et[
, soit des mots génériques commearray
,id
et@implementation
. Les mots clés pertinents sontliteral
,objc
etxcode
, pas les mentions spécifiques de[
ou@implementation
. Vous ne voulez pas que cette question apparaisse pour les requêtes ObjC générales sur Google, elle ne devrait être affichée que lorsque quelqu'un interrogeobjc literal
, ce qui se produit actuellement (grâce au titre et aux balises).Le compilateur Objective-C a une connaissance codée en dur de la disposition de la mémoire des instances de la
NSConstantString
classe, alias la__CFConstantString
classe. Découvrez laRewriteObjCStringLiteral
fonctionlib/Rewrite/RewriteModernObjC.cpp
dans le code source de clang. Le compilateur émet simplement des données qui correspondent à la disposition des instances de laNSConstantString
classe.Il existe plusieurs possibilités pour les littéraux
NSArray
et lesNSDictionary
instances. Ils pourraient faire quelque chose comme ce qu'ils ont fait pour les chaînes littérales - coder en dur la disposition de l'instance (pour une sous-classe spéciale) dans le compilateur et émettre des données dans cette disposition. Ou ils peuvent demander au compilateur d'émettre du code qui crée simplement une instance au moment de l'exécution.la source
NSArray
etNSDictionary
est assez différente de celle deNSString
. Le compilateur génère simplement un appel versNSDictionary
ouNSArray
au moment de l'exécution. C'est aussi pourquoi les variables globales ne peuvent pas être initialisées à l'aide de cette syntaxe (contrairement àNSString
). Cela nécessiterait que le résultat soit une constante de temps de compilation.À partir de "Littéraux Objective-C"
1)
NSNumber
,NSDictionary
et lesNSArray
littéraux sont disponibles dans Xcode 4.4 .2)
NSDictionary
et lesNSArray
indices nécessitent " Xcode 4.4 et OS X 10.8 ou version ultérieure SDK " ou " Xcode 4.5 et iOS 6 ou version ultérieure SDK "Il me semble que l'indication nécessite un support d'exécution et ne fonctionnera donc pas avant iOS6 .
la source