¿Cuál es el costo de incluir (en realidad, invocando a #import) un archivo de encabezado en Objective-C?
El compilador puede quedarse sin leer estos archivos innecesariamente. Una vez que #import
ed, los archivos adicionales necesitarán ser analizados, compilados, etc. para cada traducción (por ejemplo, archivo .m
) es visible en - hacer su construcción y los tiempos de enlace mucho más tiempo. 10 veces más es no sorprendente.
Me canso de incluir constantemente los mismos encabezados en varias ubicaciones, así que decidí simplemente crear un archivo GlobalReferences.h que incluye varios encabezados comúnmente referenciados.
Normalmente, ese es un enfoque muy malo. El problema común es que cada vez que se cambia alguno de los archivos incluidos por GlobalReferences.h, todo su proyecto y todas las dependencias intermedias tendrían que reconstruirse, volver a vincularse, etc.
Mi preferencia es separar programas en pequeñas bibliotecas o paquetes donde existe esta interdependencia (por ejemplo, StoreKit.framework es un pequeño paquete/biblioteca) - pero rellenar esas bibliotecas/marcos/paquetes en encabezados no resuelve nada. Además, reenviar declaraciones y almacenar sus datos en la continuación de la clase o @implementation
pueden reducir significativamente las dependencias (porque puede localizar la inclusión de una biblioteca/encabezado solo en las traducciones necesarias).
Por último, la limpieza después de lazy incluye consume mucho tiempo, especialmente cuando hay muchos y has esperado hasta que los tiempos de compilación de tu proyecto sean insoportablemente lentos. Básicamente, debe volver atrás y separar dependencias innecesarias, reconstruir, repetir (durante días).
¿Hay algún costo apreciable por incluir referencias a otros archivos si ni siquiera se utilizan?
Absolutamente. Cuanto más crecen tus proyectos, peor se vuelve la inclusión perezosa. Unas pocas inclusiones perezosas en un proyecto grande podrían agregar decenas o cientos de miles de líneas a la mayoría de sus archivos compilados, y pueden desencadenar la recopilación frecuente de muchas fuentes. Esto agrega una cantidad significativa de complejidad al proceso de compilación: las demandas de la CPU van en aumento, el uso de la RAM sube, el disco IO sube ... y nuevamente, esto se convierte en un problema mayor a medida que sus bases de datos/proyectos aumentan en complejidad.
Gracias por aclarar esto. – LucasTizma