Direttive del compilatore in Objective-C

Mattepuffo's logo
Direttive del compilatore in Objective-C

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 &hellip; 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!


Condividi

Commentami!