2012-03-17 13 views
47

Ho iniziato un nuovo progetto iOS 5 e ho notato qualcosa di nuovo nella parte superiore di ogni file .mQual è la dichiarazione @interface vuota nei file .m utilizzati?

#import "HomeViewController.h" 

@interface HomeViewController() 

@end 

@implementation HomeViewController 
@synthesize ... 
  • È questo @interface in più ... necessario se ho un file .h separata?
  • Perché non è stato visualizzato nei progetti pre iOS 5?
  • Posso usare questo invece di avere un file .h separato?
  • Qual è la migliore pratica per questo futuro?
+0

per l'incapsulamento. – janusbalatbat

+0

possibile duplicato di [Differenza tra la definizione di @interface nel file .h e .m] (http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) –

risposta

79

Questo è un class extension. Puoi usarlo per fare dichiarazioni che non vuoi essere nel file .h.

Questo è stato utilizzato da molti sviluppatori, anche prima, che hanno aggiunto manualmente l'estensione nel file .m. Quindi credo che Apple abbia incluso questo modello perché è ampiamente utilizzato ed è considerato una buona pratica.

In effetti, il file .h deve essere utilizzato solo per rendere dichiarazioni che verranno utilizzate da altri file. Potrebbe essere necessario dichiarare alcune proprietà, metodi o costanti che verranno utilizzati solo all'interno del file .m. Per quelle dichiarazioni, è meglio farle nell'estensione di classe.

Quindi, per rispondere alle vostre domande:

  • È questo @interface in più ... necessaria se ho un file .h separata?

No, non è obbligatorio ma è una buona pratica.

  • Perché questo non presentarsi in iOS 5 pre progetti?

Anche se questa era una pratica comunemente usata, non è stato incluso nel modello.

  • Posso usare questo invece di avere un file .h separata?

No. L'estensione di classe non sostituisce il file .h dove si deve dichiarare il interfaccia "pubblico" della classe.

  • Qual è la migliore pratica per questo futuro?

Si dovrebbe mettere nel prolungamento della classe tutte le dichiarazioni che non hanno bisogno di essere visibile al di fuori del file .m.

+0

Grazie per una risposta così completa! Sono contento di vedere Apple includere questo nel nuovo modello in quanto è una best practice che la maggior parte degli sviluppatori sta comunque implementando! –

11

La sezione di interfaccia nel file di implementazione consente di dichiarare variabili, proprietà e metodi privati, il che significa che non verranno visualizzati da altre classi.

No, non è richiesto affatto. Ma lo uso il più possibile e renderò pubbliche solo le cose che le altre classi hanno bisogno di vedere.

+2

Privato nel senso che il compilatore non vede le variabili, le proprietà e i metodi fuori dalla classe, ma poiché stiamo usando i metodi Objective-C non sono comunque privati ​​in quanto chiunque può chiamare qualcosa ... –

+1

Hai ragione, naturalmente ... Penso ancora in C++ a volte. –

Problemi correlati