2011-02-08 5 views
7

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?"

Respuesta

10

Si bien la estrategia que está generalmente following-- no importar más de lo necesario - es, con clase de estilo impresionante y una gran cosa para aspirar, en general, no se preocupe los casos difíciles demasiado. Solo #import lo que necesita.

En la práctica, en una máquina moderna, el único efecto sobre #import que tendrá es agregar unos microsegundos inobservables a su tiempo de compilación. Use el tiempo de desarrollador que ahorrará para hacer que su aplicación sea más rápida. :)

+0

1: lo que estaba en el proceso de decir, pero dije mejor :) – Mac

+0

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

+1

'# 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. –

1

Como programador, uno debe ir hacia adelante declaración de clases donde quiera que sea posible. Reduce considerablemente el tiempo de compilación en grandes proyectos. Pero gastar demasiado tiempo en declarar el camino hacia adelante no va a ayudar a diseñar una aplicación muy buena y atractiva. Por lo tanto, si puede reenviar declare hágalo pero no es obligatorio.

Cuestiones relacionadas