Przeglądałem informacje o wersji Xcode 4.4 i zauważyłem to:
Kompilator LLVM 4.0
Xcode zawiera teraz kompilator Apple LLVM w wersji 4.0, w tym następujące nowe funkcje języka Objective-C: [...]
- Literały Objective C: tworzenie literałów dla NSArray, NSDictionary i NSNumber, tak samo jak literały dla NSString
Jestem zaintrygowany tą funkcją. To nie jest do końca jasne dla mnie, jak literały do NSString
pracy i jak można z nich korzystać NSArray
, NSDictionary
i NSNumber
.
Jakie są szczegóły?
objective-c
xcode
objective-c-literals
Pedro Mancheno
źródło
źródło
Odpowiedzi:
Skopiowane dosłownie z http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Literały celu C: można teraz tworzyć literały dla NSArray, NSDictionary i NSNumber (tak jak można tworzyć literały dla NSString)
NSArray Literals
Poprzednio:
Teraz:
Literały NSDictionary
Poprzednio:
Teraz:
Literały NSNumber
Poprzednio:
Teraz:
[Edytować]
zxoq na http://news.ycombinator.com/item?id=3672744 dodał więcej interesujących nowych indeksów . (Dodano z literałami):
[Edytuj 2]
Nowe literały ObjC były omawiane podczas wielu sesji WWDC 2012 . Celowo nie usunąłem nazw plików i czasu każdego slajdu, więc możesz je znaleźć dla siebie, jeśli masz na to ochotę. Są to zasadniczo te same rzeczy, co stwierdzone w tym poście, ale jest też kilka nowych rzeczy, o których wspomnę powyżej obrazów.
Pamiętaj, że wszystkie obrazy są duże. Po prostu przeciągnij je do innej karty, aby wyświetlić je w oryginalnym rozmiarze
Ta część jest nowa. Dosłowne wyrażenia
Gdy masz wyrażenie (
M_PI / 16
na przykład), umieść je w nawiasie.Ta składnia działa dla wyrażeń liczbowych, wartości logicznych, znajdowania indeksu w ciągu (C-), wartości boolowskich, stałych wyliczania, a nawet ciągów znaków!
Więcej informacji na temat ciągów znaków i tego, jak / kiedy można użyć tej dosłownej składni:
Jak działają literały tablicowe
Jak działają literały słownikowe
Więcej o indeksowaniu tablic
Więcej o indeksowaniu słowników
[Edytuj 3]
Mike Ash świetnie napisał o tych nowych literałach. Jeśli chcesz dowiedzieć się więcej o tych rzeczach, koniecznie sprawdź to .
źródło
{
i[
czy są ogólne słowa takie jakarray
,id
i@implementation
. Odpowiednimi słowami kluczowymi sąliteral
,objc
axcode
nie konkretne wzmianki o[
lub@implementation
. Nie chcesz, aby to pytanie wyświetlało się w przypadku ogólnych zapytań ObjC w Google, powinno być wyświetlane tylko wtedy, gdy ktoś zapytaobjc literal
, co dzieje się obecnie (dzięki tytułowi i tagom).Kompilator Objective-C ma ustaloną wiedzę na temat układu pamięci instancji
NSConstantString
klasy, czyli__CFConstantString
klasy. SprawdźRewriteObjCStringLiteral
funkcję wlib/Rewrite/RewriteModernObjC.cpp
kodzie źródłowym clang. Kompilator po prostu emituje dane, które pasują do układu instancjiNSConstantString
klasy.Istnieje kilka możliwości literału
NSArray
iNSDictionary
instancji. Mogą zrobić coś podobnego do literalnych ciągów - zakodować układ instancji (dla specjalnej podklasy) w kompilatorze i emitować dane w tym układzie. Mogą też poprosić kompilator o wyemitowanie kodu, który po prostu tworzy instancję w czasie wykonywania.źródło
NSArray
iNSDictionary
jest zupełnie inna niż w przypadkuNSString
. Kompilator po prostu generuje wywołanie doNSDictionary
lubNSArray
w czasie wykonywania. Z tego powodu zmiennych globalnych nie można zainicjować przy użyciu tej składni (w przeciwieństwie doNSString
). Wymagałoby to, aby wynik był stałą czasową kompilacji.Z „Literałów celu C”
1)
NSNumber
,NSDictionary
aNSArray
literały są dostępne w Xcode 4.4 .2)
NSDictionary
iNSArray
indeksowanie wymaga „ Xcode 4.4 i OS X 10.8 lub nowszy SDK ” lub „ Xcode 4.5 i iOS 6 lub nowszy SDK ”Wydaje mi się, że indeksowanie wymaga obsługi środowiska wykonawczego i dlatego nie będzie działać przed iOS6 .
źródło