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]