Ich habe die Versionshinweise für Xcode 4.4 durchgesehen und Folgendes festgestellt:
LLVM 4.0 Compiler
Xcode enthält jetzt den Apple LLVM Compiler Version 4.0, einschließlich der folgenden neuen
Objective-C- Sprachfunktionen: [...] - Objective-C-Literale: Erstellen Sie Literale für NSArray, NSDictionary und NSNumber, genau wie die Literale für NSString
Ich bin fasziniert von dieser Funktion. Es ist nicht ganz zu mir klar, wie Literale für NSString
Arbeit und wie man sie nutzen könnte auf NSArray
, NSDictionary
und NSNumber
.
Was sind die Details?
objective-c
xcode
objective-c-literals
Pedro Mancheno
quelle
quelle
Antworten:
Wörtlich kopiert von http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Objective-C-Literale: Man kann jetzt Literale für NSArray, NSDictionary und NSNumber erstellen (genau wie man Literale für NSString erstellen kann).
NSArray Literals
Vorher:
Jetzt:
NSDictionary Literale
Vorher:
Jetzt:
NSNumber Literals
Vorher:
Jetzt:
[Bearbeiten]
zxoq unter http://news.ycombinator.com/item?id=3672744 hat weitere interessante neue Abonnements hinzugefügt. (Hinzugefügt mit Literalen):
[Bearbeiten 2]
Die neuen ObjC-Literale wurden in mehreren WWDC 2012- Sitzungen erörtert . Ich habe absichtlich die Dateinamen und die Uhrzeit jeder Folie nicht entfernt, damit Sie sie selbst finden können, wenn Sie Lust dazu haben. Sie sind im Wesentlichen dasselbe wie in diesem Beitrag angegeben, aber es gibt auch einige neue Dinge, die ich über den Bildern erwähnen werde.
Bitte beachten Sie, dass alle Bilder groß sind. Ziehen Sie sie einfach in eine andere Registerkarte, um sie in ihrer ursprünglichen Größe anzuzeigen
Dieser Teil ist neu. Ausdrucksliterale
Wenn Sie einen Ausdruck haben (
M_PI / 16
zum Beispiel), sollten Sie ihn in Klammern setzen.Diese Syntax funktioniert für numerische Ausdrücke, Boolesche Werte, das Finden eines Index in einer (C-) Zeichenfolge, Boolesche Werte, Aufzählungskonstanten und sogar Zeichenfolgen!
Weitere Informationen zu Zeichenfolgen und wie / wann Sie diese wörtliche Syntax verwenden können:
Wie Array-Literale funktionieren
Wie Wörterbuchliterale funktionieren
Weitere Informationen zum Array-Abonnement
Weitere Informationen zum Abonnieren von Wörterbüchern
[Bearbeiten 3]
Mike Ash hat eine großartige Zusammenfassung über diese neuen Literale. Wenn Sie mehr über dieses Zeug erfahren möchten, schauen Sie es sich an .
quelle
{
und[
oder sind generische Begriffe wiearray
,id
und@implementation
. Die entsprechenden Schlüsselwörter sindliteral
,objc
undxcode
nicht die spezifische Erwähnungen[
oder@implementation
. Sie möchten nicht, dass diese Frage bei allgemeinen ObjC-Abfragen bei Google angezeigt wird. Sie sollte nur angezeigt werden, wenn jemand Fragen stelltobjc literal
, was derzeit der Fall ist (dank Titel und Tags).Der Objective-C-Compiler verfügt über fest codierte Kenntnisse über das Speicherlayout von Instanzen der
NSConstantString
Klasse, auch bekannt als die__CFConstantString
Klasse. Überprüfen Sie dieRewriteObjCStringLiteral
Funktion imlib/Rewrite/RewriteModernObjC.cpp
Clang-Quellcode. Der Compiler gibt einfach Daten aus, die dem Layout der Instanzen derNSConstantString
Klasse entsprechen.Es gibt verschiedene Möglichkeiten für Literale
NSArray
undNSDictionary
Instanzen. Sie könnten so etwas wie für Literalzeichenfolgen tun - das Instanzlayout (für eine spezielle Unterklasse) im Compiler fest codieren und Daten in diesem Layout ausgeben. Oder der Compiler gibt Code aus, der zur Laufzeit einfach eine Instanz erstellt.quelle
NSArray
undNSDictionary
ist ganz anders als die vonNSString
. Der Compiler generiert einfach nur einen Aufruf anNSDictionary
oderNSArray
zur Laufzeit. Aus diesem Grund können globale Variablen auch nicht mit dieser Syntax initialisiert werden (im Gegensatz zuNSString
). Dies würde erfordern, dass das Ergebnis eine Kompilierungszeitkonstante ist.Aus "Objective-C-Literalen"
1)
NSNumber
,NSDictionary
undNSArray
Literale sind in Xcode 4.4 .2)
NSDictionary
undNSArray
Abonnements benötigen " Xcode 4.4 und OS X 10.8 oder höher SDK " oder " Xcode 4.5 und iOS 6 oder höher SDK ".Sieht für mich so aus, als ob das Abonnement Laufzeitunterstützung benötigt und daher vor iOS6 nicht funktioniert .
quelle