Cosa rappresenta il simbolo @ nell’objective-c?

Sto imparando l’objective-c e continuo a sbattere contro il simbolo @. Viene utilizzato in diversi scenari, ad esempio all’inizio di una stringa o per sintetizzare i metodi di accesso.

Cosa significa il simbolo @ nell’objective-c?

Il carattere @ non viene utilizzato negli identificatori C o C ++, quindi viene utilizzato per introdurre parole chiave in linguaggio Objective-C in un modo che non sia in conflitto con le parole chiave delle altre lingue. Ciò consente alla parte “Obiettivo” della lingua di interagire liberamente con la parte C o C ++.

Quindi con pochissime eccezioni, ogni volta che vedi @ in qualche codice Objective-C, stai guardando costrutti Objective-C piuttosto che costrutti C o C ++.

Le principali eccezioni sono id , Class , nil e Nil , che sono generalmente trattate come parole chiave della lingua anche se possono avere un typedef o #define dietro di esse. Ad esempio, il compilatore tratta effettivamente id particolare in termini di regole di conversione del tipo di puntatore che applica alle dichiarazioni, nonché alla decisione di generare barriere di scrittura GC.

Altre eccezioni sono in , out , inout , byref , bycopy e bycopy ; questi vengono utilizzati come annotazioni sulla class di archiviazione sul parametro del metodo e sui tipi restituiti per rendere gli oggetti distribuiti più efficienti. (Diventano parte della firma del metodo disponibile dal runtime, che DO può esaminare per determinare come serializzare al meglio una transazione.) Ci sono anche gli attributi all’interno @property dichiarazioni @property , copy , retain , assign , nonatomic , nonatomic , nonatomic , getter e setter ; quelli sono validi solo all’interno della sezione attributi di una dichiarazione @property .

Da Tutorial Objective-C: Il simbolo @ , il motivo per cui è sulla parte anteriore di varie parole chiave:

L’uso di @ dovrebbe rendere più semplice avvitare un compilatore Objective-C su un compilatore C esistente. Poiché @ non è valido in nessun contesto in C tranne un letterale stringa, il tokenizer (un passo iniziale e semplice nel compilatore) potrebbe essere modificato per cercare semplicemente il carattere @ al di fuori di una costante di stringa (il tokenizzatore capisce i valori letterali stringa , quindi è in grado di distinguerlo). Quando si incontra @, il tokenizer mette il resto del compilatore in “modalità Objective-C”. (Il parser Objective-C sarebbe responsabile del ritorno del compilatore alla normale modalità C quando rileva la fine del codice Objective-C).

Inoltre, se visto di fronte a una stringa letterale, crea una NSString piuttosto che un ‘char *’ in C.

Da Macrumors: Objective-C Tutorial , quando di fronte alla stringa letterale:

Ci sono anche @ “” letterali NSString. È essenzialmente una scorciatoia per il metodo + StringWithUTF8String di NSString.

@ Aggiunge anche il supporto Unicode alle stringhe C.

Dal manuale :

I framework Objective-C in genere non usano stringhe in stile C. Invece, passano le stringhe come oggetti NSString.

La class NSString fornisce un wrapper di oggetti per stringhe che presenta tutti i vantaggi che ci si aspetterebbe, compresa la gestione della memoria incorporata per l’archiviazione di stringhe di lunghezza arbitraria, supporto per Unicode, utilità di formattazione in stile printf e altro. Poiché tali stringhe vengono comunemente utilizzate, Objective-C fornisce una notazione abbreviata per la creazione di oggetti NSString da valori costanti. Per usare questa stenografia, tutto ciò che devi fare è precedere una normale stringa con doppia virgoletta con il simbolo @, come mostrato nei seguenti esempi:

 NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];