Programmazione iOS e Mac, Programmazione OOP(File .h e .m)

File di interfaccia .h

Un file d’interfaccia dichiara una classe e attraverso la sua superclasse, implicitamente tutte le dichiarazioni delle classi ereditate fino a NSObject*.

Il file d’interfaccia (.h) dev’essere importato in ogni modulo che ne fa uso attraverso la direttiva #import

La direttiva è identica alla #include del C, a meno del fatto che garantisce automaticamente l’unicità dell’inclusione del file.

*NSObject = è la classe principale in Cocoa. Tutti gli oggetti derivano da NSObject

Se la superclasse fa riferimento ad una classe non appartenente alla gerarchia, occorre importarla esplicitamente oppure dichiararla mediante la direttiva @Class

@Class miaClsasse;

Non importa dove sia il file interfaccia. La direttiva informa semplicemente il compilatore che MiaClasse è un nome di classe.

Il file d’interfaccia comunica:

In che modo la classe è connessa all’interno della gerarchia;

quali variabili d’istanza contiene;

quali variabili eredita;

quali sono i metodi  che possono essere inviate alle sue istanze;

File di implementazione .m

Il file implementazione (.m) racchiude la specifica (implementazione) di tutti i metodi dichiarati nel file di interfaccia.

file implementazione (.m) racchiude la specifica (implementazione) di tutti i metodi dichiarati nel file di interfaccia.

I metodi di una classe sono molto simili alle funzioni in C, col codice racchiuso tra due parentesi graffe  .

Es

+metodo{

…….

}

Un metodo d’istanza può accedere alle variabili d’istanza semplicemente attraverso il loro nome .

Quando una variabile d’istanza appartiene ad un oggetto che non è il ricevitore del messaggio, occorre specificarne il tipo attraverso l’operatore ‘->’

Esempio

[code lang=”objc”]
<div>
<div>
<div>
<div>
<pre>@interface ClassA : NSObject
{</pre>
ClassA *twin;
int instVar;
struct features *feature;
<pre>}

– makeTwin
{</pre>
</div>
</div>
</div>
<div>
<div>

if( !twin ) {

twin = [[ClassA alloc] init]; twin->instVar = instVar; twin->feature = feature;

}
return twin;

</div>
</div>
<div>
<div>
<div>

{

</div>
</div>
</div>
</div>
[/code]