2013-02-05 9 views
23

Eventuali duplicati:
Is there some literal dictionary or array syntax in Objective-C?NSArray objectAtIndex: stenografia

Recentemente ho notato che qualcosa di strano sembra funzionare in Objective-C.

Quando ho un array,

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

posso normalmente accedere al secondo elemento da,

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

tuttavia mi sembra ora essere in grado di accedere tramite.

NSString *element = myArray[1]; 

Qualcuno sa se questo è ora un comportamento definito e quindi sicuro da usare, o dovrei evitarlo? Grazie a tutti coloro che possono aiutare !!

+0

Siamo spiacenti, non ero abbastanza sicuro su come cercarlo. –

+0

Grazie a tutti per le vostre risposte !! :) –

risposta

28

Questa sintassi è stata aggiunta in Clang 3.3: Objective C Literals. In sostanza, il compilatore converte espressioni del tipo objCObj[idx] nell'espressione [objCObj objectAtIndexedSubscript:idx]. Funziona anche per i dizionari e tu sei libero di adottarlo per i tuoi oggetti.

In questo modo, si è perfettamente sicuri di utilizzarlo, presupponendo che si stia utilizzando una versione moderna di Objective C e un compilatore Objective C adeguatamente aggiornato (ad esempio Clang).

+0

Apple ha fatto un disastro stonato .. Cosa è successo a * "se non è rotto, non aggiustarlo" *? – Jacksonkr

4

questa è una nuova funzionalità di Objective-C e avaiable dal xCode 4.5

suoi sicuro di usare questa sintassi, si può anche dare le proprie classi di supporto per questo.

2

Ya, è sicuro usare questa sintassi.

Queste sintassi fanno parte di Modern Objective-C.

È possibile controllare questo articolo per ulteriori opzioni: ObjectiveCLiterals

2

Si tratta di un codice perfettamente valido per l'ultima versione del compilatore LLVM. Finora, non è valido per altri compilatori (ad esempio GCC).

Se si dovrebbe evitare o meno - beh, è ​​una questione di gusti. Ci sono parecchie grandi discussioni su internet in quanto l'indicizzazione si comporta in modo leggermente diverso (un metodo completamente diverso è usato per implementarlo). Ci sono anche discussioni sull'uso dei letterali di espressione o meno visto che ci sono occasioni in cui rendono il codice meno leggibile (ad es. Sono scritti come letterali ma in realtà sono oggetti autorelasciati). Nota che tutto è fatto usando i letterali può essere fatto usando semplici macro.