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?"
+1: cosa stavo dicendo, ma ho detto meglio :) – Mac
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
'# 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. –