Actualización para Xcode 5 y iOS 7
nota: para que una solución Xcode 7 / Swift 2.1 elimine las declaraciones print () en una versión de lanzamiento, encuentre mi respuesta aquí .
Sí, debe eliminar cualquier declaración NSLog en su código de lanzamiento, ya que solo ralentiza su código y no es de ninguna utilidad en una versión de lanzamiento. Afortunadamente, en Xcode 5 (iOS 7), es increíblemente sencillo eliminar todas las declaraciones de NSLog 'automáticamente' en las versiones de lanzamiento. Entonces por qué no hacerlo.
Primero los 3 pasos a seguir, luego alguna explicación
1) en su proyecto Xcode, ubique el archivo 'yourProjectName-prefix.pch' (normalmente lo encontrará en el grupo 'archivos de soporte', donde se encuentra su archivo main.m
2) agregue estas 3 líneas al final del archivo '.pch':
#ifndef DEBUG
#define NSLog(...);
#endif
3) pruebe la diferencia entre su versión de "depuración" y "lanzamiento". Una forma de hacer esto es a través de 'editar esquema' -> 'ejecutar nombre de la aplicación' -> debajo de la pestaña 'información', seleccione usando el cuadro desplegable entre depuración y liberación. En la versión de lanzamiento, no verá ningún resultado de NSLog en la consola de depuración.
¿Como funciona todo esto?
En primer lugar, uno debe saber que un preprocesador es relativamente 'tonto' y simplemente actúa como un 'reemplazador de texto' antes de que se llame al compilador. Reemplaza todo lo que '#defines' por lo que sigue a la #define
declaración.
#define NSLog(...);
El (...)
significa 'nada' entre los paréntesis (). Tenga en cuenta también ;
el final. Esto no es estrictamente necesario ya que el compilador optimizará esto, pero me gusta ponerlo allí, ya que es más "correcto". Después de nuestro, #define
no hay 'nada', por lo que el preprocesador lo reemplazará con 'nada', por lo que simplemente descartará la línea completa, comenzando en NSLog...
hasta e incluyendo el ;
.
Definir declaraciones se pueden hacer condicional usando #ifdef
(si está definido) o #ifndef
(si no está definido)
aquí escribimos #ifndef DEBUG
, que significa 'si el símbolo DEBUG no está definido'. El #ifdef
o la #ifndef
necesidad de ser 'cerrado' con#endif
Xcode 5 define por defecto el símbolo 'DEBUG' para nosotros cuando el modo de construcción es 'DEBUG'. En 'lanzamiento' esto no está definido. puede verificar esto en la configuración de su proyecto, pestaña 'Configuración de compilación' -> desplácese hacia abajo hasta la sección 'Apple LLVM 5.0 - Preprocesamiento' -> macros de preprocesador. ¡Verá que el símbolo 'DEBUG' no está definido para versiones de lanzamiento!
finalmente, Xcode crea el archivo .pch automáticamente y se incluye automáticamente en cada archivo fuente durante el tiempo de compilación. Así que es como si lo hubiera puesto todo #define
en cada uno de sus archivos fuente.