2011-02-08 5 views
7

Sono ben consapevole del fatto che la regola generale è che dovresti solo importare ciò che è necessario - interfacce di classe base, interfacce di protocollo, ecc. - per una classe compilare e utilizzare @class per tutto ciò che può essere inoltrato. Tuttavia, mi sono imbattuto nel seguente scenario in cui mi sentivo come #import era una soluzione più appropriata:È sempre inappropriato #importare più del necessario assoluto nelle interfacce Objective-C?

#import "ClassA.h"  // Previously, @class ClassA; 
#import "ClassB.h"  // Previously, @class ClassB; 
#import "ClassC.h"  // Unnecessary to forward-declare 

@interface ClassD : NSObject 

@property (nonatomic, retain) ClassA * classAObject; 
@property (nonatomic, retain) ClassB * classBObject; 
@property (nonatomic, copy) NSArray * classCObjects; 

@end 

In un primo momento, ho semplicemente avanti dichiarato ClassA e ClassB (come i componenti di classCObjects sono di ClassC solo per contratto). Questo era il mio istinto iniziale.

Ma dopo aver tentato di utilizzare ClassD altrove, ho subito capito che dovevo importare anche ClassA, ClassB, e ClassC insieme ClassD ovunque ho usato. Questo sembra qualcosa di cui un'altra classe non dovrebbe preoccuparsi quando usa ClassD. Il mio pensiero è che, in sostanza, un utente di ClassD dovrebbe davvero importare solo ClassD.h e assumere che può funzionare con l'intera classe senza un gruppo di altre dichiarazioni #import. Dato l'approccio di cui sopra, ho praticamente incluso tutto il necessario per lavorare all'interno del dominio di ClassD proprio nella sua interfaccia.

C'è un motivo valido per cui questo approccio non è l'ideale, ad eccezione di "hai incluso più di quanto sia assolutamente necessario per la compilazione?"

risposta

10

Mentre la strategia che in genere segui-- non importa più del necessario - è uno stile fantastico e di classe e una grande cosa da mirare in generale, non preoccuparti troppo dei casi delicati. Solo #import quello che ti serve.

In pratica, su una macchina moderna, l'unico effetto superiore a #import sarà quello di aggiungere pochi microsecondi non osservabili al tempo di compilazione. Usa il tempo di sviluppo che risparmierai per rendere la tua app più divertente. :)

+0

+1: cosa stavo dicendo, ma ho detto meglio :) – Mac

+0

Questo è ciò che era la mia realizzazione, ma volevo assicurarmi di non violare alcuni importanti elementi di design come risultato. Per me va bene. :) – LucasTizma

+1

'# import' potrebbe essere il miglior singolo miglioramento rispetto alla scala C che Obj-C offre. ;) Usalo, amalo e non farlo sudare. È così che rotolo, comunque. In bocca al lupo. –

1

Come programmatore, si dovrebbe andare avanti alla dichiarazione di classi dove mai è possibile. Riduce notevolmente i tempi di compilazione su grandi progetti. Ma passare troppo tempo su dove inoltrare la dichiarazione non è un modo per aiutarti a progettare un'applicazione molto attraente. Quindi, se è possibile inoltrare la dichiarazione fare ma non è obbligatorio.

Problemi correlati