Soy muy consciente de que la regla general es que sólo debe importar lo que es necesario interfaces de clase-base, interfaces de protocolo, etc.-para una clase para compilar y usar @class
por todo lo que puede ser declarado prospectivas. Sin embargo, me encontré con el siguiente escenario en el que me sentí como #import
era una solución más apropiada:¿Es siempre inapropiado importar # más de lo necesario en las interfaces de 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
Al principio, simplemente reenviar declarado ClassA
y ClassB
(como los componentes de classCObjects
son de ClassC
sólo mediante contrato) Este fue mi instinto inicial.
Pero después de tratar de utilizar ClassD
otra parte, rápidamente me di cuenta que tenía que importar también ClassA
, ClassB
y ClassC
junto con ClassD
donde quiera que lo utilizaron. Esto parece algo que otra clase no debería tener en cuenta al usar ClassD
. Mi idea era que, básicamente, un usuario de ClassD
debe realmente sólo se preocupan por la importación de ClassD.h
y asumir que puede trabajar con toda la clase sin un montón de otras declaraciones #import
. Dado el enfoque anterior, básicamente he incluido todo lo necesario para trabajar dentro del dominio de ClassD
directamente en su interfaz.
¿Existe una razón fuerte por este enfoque no es lo ideal, a excepción de "que ha incluido más de lo absolutamente necesario para la compilación?"
1: lo que estaba en el proceso de decir, pero dije mejor :) – Mac
Eso es lo que era mi realización, pero quería asegurarse de que no estaba violando un poco más importante director de diseño como resultado. Funciona para mi. :) – LucasTizma
'# import' podría ser la mejor mejora sobre la C recta que ofrece Obj-C. ;) Úsalo, ámalo y no te preocupes. Así es como ruedo, de todos modos. Buena suerte. –