Qual è la relazione tra una classe e un'interfaccia nell'obiettivo-c? Come mai dichiariamo una classe utilizzando @interface
anziché @class
?
Qual è la relazione tra una classe e un'interfaccia nell'obiettivo-c? Come mai dichiariamo una classe utilizzando @interface
anziché @class
?
La parola chiave interface
come in Java o C # viene utilizzata per definire un modello completamente astratto di un oggetto. Cioè, puoi solo definire un insieme di metodi che un oggetto dovrebbe avere, ma senza alcun tipo di dettaglio di implementazione.
In Objective-C, @interface
viene utilizzato per lo stesso effetto. Anche tutto il blocco @interface...@end
è completamente astratto. Per implementare questi metodi, devi farlo all'interno del blocco @implementation...@end
.
In altre parole, potresti dire che in Objective-C sei costretto a definire un'interfaccia e anche una classe che la implementa, per ogni classe che ti serve e con lo stesso nome. Potresti fare la stessa cosa in Java o C #, se non fosse per il conflitto di denominazione.
Ora, questa separazione sembra non necessaria se hai mai usato Java o C #, ma è applicata a causa di come il codice è compilato (Objective-C è un superset di C, come C ++). È necessario importare un file di classe per compilare il codice che lo utilizza. Se ogni classe è definita e implementata in un unico file, quando si importa il file di un'altra classe si importeranno tutte le sue importazioni. Questo alla fine porterebbe a dipendenze circolari irrisolvibili. Questo è il motivo per cui devi definire l'interfaccia di una classe in un file di intestazione (* .h) e anche solo importare le intestazioni.
Nota a margine, per dichiarare le interfacce Java / C # -like in Objective-C, puoi usare il blocco @protocol
.
Leggi altre domande sui tag objective-c