2013-02-05 9 views
23

Mögliche Duplizieren:
Is there some literal dictionary or array syntax in Objective-C?NSArray objectAtIndex: Stenografie

Ich habe vor kurzem bemerkt, dass etwas Fremdes scheint in Objective-C zu arbeiten.

Wenn ich ein Array haben,

NSArray *myArray = @[@"1", @"b", @"3", @"d"]; 

ich normalerweise das zweite Element durch,

NSString *element = [myArray objectAtIndex:1]; // second element 

jedoch scheinen ich jetzt auch sie über zugreifen können zugreifen können.

NSString *element = myArray[1]; 

Wer weiß, ob dies nun ein definiertes Verhalten und damit sicher zu verwenden, oder soll ich es vermeiden? Danke an alle, die helfen können !!

+0

Sorry, war nicht ganz sicher, wie man danach sucht. –

+0

Vielen Dank für Ihre Antworten !! :) –

Antwort

28

Diese Syntax wurde in Clang 3.3: Objective C Literals hinzugefügt. Im Wesentlichen konvertiert der Compiler Ausdrücke vom Typ objCObj[idx] in den Ausdruck [objCObj objectAtIndexedSubscript:idx]. Es funktioniert auch für Wörterbücher, und Sie können es für Ihre eigenen Objekte übernehmen.

Als solche können Sie vollkommen sicher sein, vorausgesetzt, Sie verwenden eine moderne Version von Objective C und entsprechend aktualisierte Objective-C-Compiler (d. H. Clang).

+0

Apple hat ein Chaos aus Stenographien gemacht .. Was ist passiert mit * "Wenn es nicht kaputt ist, repariere es nicht" *? – Jacksonkr

4

dies ist ein neues Feature von Objective-C und verfügbar seit xCode 4,5

seine sichere diese Syntax verwenden möchten, können Sie sogar Ihre eigenen Klassen für diese Unterstützung geben.

2

Ja, es ist sicher, diese Syntax zu verwenden.

Diese Syntax ist Teil von Modern Objective-C.

können Sie diesen Artikel überprüfen, um weitere Optionen: ObjectiveCLiterals

2

Es ist ein absolut gültiger Code für die neueste Version der LLVM-Compiler. Bisher ist es für andere Compiler (z. B. GCC) ungültig.

Ob Sie es vermeiden sollten oder nicht - nun, es ist Geschmackssache. Es gibt mehrere große Diskussionen darüber im Internet, da sich die Indizierung etwas anders verhält (es wird eine ganz andere Methode verwendet). Es gibt auch Diskussionen darüber, ob die Ausdruckliterale verwendet werden sollen oder nicht, da es zu Auslassungen kommt, wenn sie den Code weniger lesbar machen (z. B. sind sie wie Literale geschrieben, aber sie sind tatsächlich automatisch freigegebene Objekte). Beachten Sie, dass alles unter Verwendung von Literalen mit einfachen Makros durchgeführt werden kann.