Direttive del compilatore in Objective-C
L'Objective-C è pieno zeppo di sorprese (anche se continuo a dire che la sua sintassi non mi piace granchè).
Vediamo oggi le direttive del compilaotore.
@class serve per dichiarare una classe senza usare l'istruzione import.
@class MyClass
@protocol @required @optional @end definisce la dichiarazione di un protocollo.
Le altre 3 direttive che seguono vengono usate per:
- dichiarare metodi required
- dichiara metodi opzionali
- dichiara la fine del protocollo
@protocol MyProtocol
@interface @public @package @protected @private @property @end definisce l'inizio di una classe.
E' la direttiva che troverete di più.
In Obj-C tutte le classi derivano da NSObject e tramite @interface possiamo dichiarare che la classe è conforme anche ad altri protocolli.
@interface MyClass : <Protocol1, Protocol2> {
@public
@private
@protected
@package
}
@property (nonatomic, retain) tipo_dato property;
@end
Un esempio "astratto" di classe.
@public, @private, @protected @package serve per impostare la visiblità delle variabili di istanza.
@property dichiara una proprietà accessbile tramite la notazione punto.
I valori tra parentesi sono parametri che la proprietà può assumere e ce ne sono parecchi:
- readwrite: indica che è richiesto sia il metodo get che il metodo set dell'attributo.
- readonly: indica che è richiesto solo il metodo get del'attributo.
- assign: indica che il metodo set userà semplicemente un assegnamento. Si usa principalmente per attributi scalari come per esempio int e float.
- retain: incrementa di uno il contatore che gestisce i riferimenti all'oggetto. Questo argomento verrà trattato più approfonditamente quando parleremo della memoria.
- copy:indica che una copia dell'oggetto viene usata per l'assegnamento.
- nonatomic: indica che il metodo che verrà creato avrà la caratteristica di atomicità. Ciò è indispensabile si si usano, nell'applicazioni, i thread per garantire la consistenza dei dati.
Probabilmente non sono tutte.
@end dichiara la fine della classe/categoria.
@throw @try @catch @finally vengono usate per la gestione delle eccezioni.
@try {
// code that might throw an exception … like this one:
NSException *exception = [NSException exceptionWithName:@"DevMeException" reason:@"Test exception!" userInfo:nil];
@throw exception;
} @catch (NSException *ne) {
// ISTRUZIONI
}
@finally {
// CLAUSOLA NON OBBLIGATORIA. L'ISTRUZIONE VIENE ESEGUITA SEMPRE
}
@synchronized assicura che il blocco di codice venag eseguito da un thread alla volta.
@autoreleaspool usato al posto NSAutoreleasePool nelle applicazioni che usano l'Automatic Reference Counting (ARC).
Ad essere sincero non so se ce ne sono altre.
Queste sono quelle che mi è capitato di usare/trovare/studiare.
Enjoy!
objective-c direttive compilatore @class @proto
Commentami!