2010-02-17 6 views

Respuesta

21

Debe usar el UIKit cuando necesite componentes de la GUI. Pero usted no necesita importar esta biblioteca si ya se definen en la Prefix.pch:

#ifdef __OBJC__ 
    #import <Foundation/Foundation.h> 
    #import <UIKit/UIKit.h> 
#endif 

Se le permite importar estas bibliotecas para todo el proyecto actual.

+0

No sabía esto. Gracias. –

+0

Tomó nota de la respuesta de @ RobNapier a continuación, en la que dice que debe importarla en cada '.h' QUE LO USA DE TODOS MODOS. –

+1

Tenga en cuenta que Prefix.pch ahora está en desuso – andreacipriani

0

Debe importarlo en el archivo .h de cualquier clase que lo necesite. Esto es cierto a menos que la clase amplíe otra clase que lo importe, entonces no es necesario. Probablemente no quiera hacer nada más complejo ya que todas las aplicaciones de iPhone vincularán la biblioteca. Si estuviéramos hablando de una biblioteca de terceros o menos común, es posible que desee tener cuidado al respecto. Para evitar problemas de reutilización del código.

23

Si bien el archivo pch es útil para precompilar encabezados para usted, realmente recomiendo que los archivos importen lo que usan. Eso hace que sea mucho más fácil entender las dependencias, y mucho más fácil reutilizar el código, incluida la reutilización en todas las plataformas (iPhone vs. Mac).

Teniendo esto en cuenta, la respuesta es que no debe importar UIKit.h en cada archivo. Debe importarlo en cada archivo que use UIKit. Deberían ser tus clases de Vista y Controlador. Las clases de modelo casi nunca deberían usar UIKit. En general, deberían importar Foundation.h. Seguir esta regla facilitará mover sus objetos a otros proyectos que pueden tener un código diferente en el archivo .pch, y más fácil reutilizar sus clases modelo tanto en iPhone como en Mac.

También normalmente no recomiendo que importe UIKit.h o Foundation.h en subclases de sus propias clases. Normalmente solo importo UIKit, AppKit o Foundation en el archivo de encabezado de más alto nivel de mi código. Por ejemplo, si tengo una subclase UIView llamada MYAbstractView que importa UIKit.h (para incluir la definición de UIView) y luego agrego una subclase MYConcreteView, solo importaría MYAbstractView.h.

Tenga en cuenta que UIKit y AppKit ya importan Foundation, por lo que no hay motivo para importar ambos.

+1

¿Sigue siendo cierto este comentario con las últimas versiones de Xcode/iOS, w/ARC, etc.? – NathanChristie

+1

Nada en las versiones recientes de Xcode cambiaría este consejo. –

Cuestiones relacionadas