Cómo eliminar NSLog () desde XCode fuente

<a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSLog">NSLog()</a> è una función útil en las primeras etapas de un proyecto, para probar y depurar una aplicación para el iPhone de Apple o, más generalmente, en el entorno XCode. Siendo sólo una función, al igual que la otra, se hará sentir su presencia incluso cuando la liberación (release) nuestro ejecutable. potrebbero influire sulle performance della nostra applicazione, soprattutto se abbiamo inserito NSLog() all'interno di loop. Por lo tanto, se hace necesaria para eliminar, de alguna manera, todas las filas de NSLog() de nuestro código, o porque ya no es necesario, o porque las llamadas a NSLog() pueden afectar el rendimiento de nuestra aplicación, sobre todo si ponemos NSLog() para 'bucle interno.

Excluimos de inmediato la solución a la "búsqueda" y "eliminar"; porque mañana podría ser utilizado de nuevo. También excluimos la solución a los "comentarios", "buscar" y molesto por la misma razón que antes. Afortunadamente, existe una solución limpia, simple, y están usando las sentencias condicionales correctas del compilador. Lo que vamos a hacer en la práctica, y para indicar al compilador que excluir - si hay una condición específica - al compilar nuestras líneas de código fuente que contengan NSLog() .

Las directivas de compilaciones y sentencias condicionales del compilador, son una herramienta muy poderosa y generalizada. Si viene desde el desarrollo de la ANSI-C sin duda lo sabe muy bien y se utilizzte en muchas situaciones. La peculiaridad de estas "instrucciones" radica en el hecho, ya mencionado, para ser vistos por el compilador y no ejecutable. Esta característica los hace útiles en muchos casos y permite resolver los problemas de otro modo muy molesto.

Vamos a ver un ejemplo de código que, como se ha anunciado, permite "eliminar" de las piezas de compilación de código, en nuestro caso NSLog() :

1
2
3
4
5
6
# Definir ACTIVE_NSLOG 1
/ / Relleno ACTIVE_NSLOG Si se define la constante
/ / El bloque de código entre # ifdef y # endif
# Ifdef ACTIVE_NSLOG
" ... bla bla" ) ; NSLog (@ "... bla, bla");
# Endif

Compilador de sentencias condicionales son parte de la misma familia que #define ; también, de hecho, están precedidas por una "libra" ( # ). En el ejemplo mostrado, hemos definido una constante ACTIVE_NSLOG ; è definito. las siguientes líneas de código para indicar al compilador "incluyen" línea NSLog() sólo si ACTIVE_NSLOG está definido. , basterà eliminare la definizione della costante ACTIVE_NSLOG per far sparire, alla prossima compilazione, tutti i nostri NSLog() . Si tuviéramos el cuidado, durante la redacción de nuestro código para insertar llamadas a NSLog() dentro del bloque #ifdef ... #endif , simplemente elimine la definición de la constante ACTIVE_NSLOG a desaparecer en la próxima compilación, todos nuestra NSLog() .

Una mejor solución, y la final

Veamos ahora cómo configurar el entorno XCode para mejorar aún más lo que hemos hecho! En primer lugar, se elige un nombre de constante que vamos a utilizar en nuestros proyectos de excluir de la compilación NSLog() . o quello che preferite. Puede elegir el nombre que desee, desde DEBUG a MIO_DEBUG o lo que usted prefiera. Abra su proyecto, nuevo o viejo. Coloque todos NSLog() dentro del bloque (o un bloque):

1
2
3
# Ifdef MIO_DEBUG
" ... bla bla" ) ; NSLog (@ "... bla, bla");
# Endif

Seleccione el archivo principal de su proyecto, haga clic en el elemento y seleccione Obtener información.

getinfo

Esto abrirá una ventana con información sobre el proyecto:

userdefine

Seleccione la ficha Generar, verifique para estar en la configuración de depuración (esta es la joya), ve a la sección, un nuevo campo llamado definidos por el usuario y agregar a través del botón en la parte inferior izquierda OTHER_CFLAGS . En este assegnamoli el valor -DMIO_DEBUG=1 . La sintaxis es -D{mia define}=1 .

Este procedimiento tiene dos ventajas:

  1. No se debe incluir en el código #define MIO_DEBUG 1 , pero lo hacemos utilizando la información sobre el proyecto. Así que, cuando vamos a llenar la versión de lanzamiento (el uno sin el NSLog() ) no tienen que acordarse de eliminar la línea #define MIO_DEBUG 1
  2. La constante se define en relación con la configuración, en nuestro caso la depuración. Por lo tanto, ir a la configuración de lanzamiento (release) estará ausente y las filas constantes con NSLog() no será compilado

Conclusiones

El procedimiento descrito anteriormente puede ser útil en un moltidutine otros casos, con NSLog() , no tienen nada que ver. Las sentencias condicionales que el compilador puede ayudar en una amplia gama de contextos. A menudo se utilizan por los programadores para determinar el tipo de sistema operativo, la versión de destino, la presencia de procesadores matemáticos mientras se mantiene la misma fuente "idéntica".

Para comprender, por ejemplo, podemos utilizzre nuestra constante MIO_DEBUG también intervenir en otras áreas del código:

1
2
3
4
5
6
7
8
9
10
/ / Si estamos en depuración ganar el juego
/ / Con una puntuación de 100 en lugar de 10 000 :)
# Ifdef MIO_DEBUG
score == 100 ) si (== score 100)
# Else
score == 10000 ) si (== puntuación 10000)
# Endif
{
; [Self haiVinto];
}

Para terminar, he aquí algunos ejemplos y variantes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ / Más generalmente existe
# Si la expresión
/ / Si la declaración similar a la tradicional, así que con una expresión llena

/ / Comprobar si se ha definido como una constante
# Ifdef constante

/ / Comprobar si hay una constante definida
# Ifndef constante

/ / Else
# Else

/ / Fin de bloque
# Endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Por ejemplo ...
# Define DEBUG 1
# Definir MIA_ALTRA_COSTANTE 5

...
# Si DEBUG
/ / Compile este
# Else
/ / En caso contrario llene éste
# Endif

# Si MIA_ALTRA_COSTANTE> 4
"..." ) ; NSLog (@ "...");
# Endif
1
2
3
4
# Ifndef INCLUDE_MIO_FILE
# Definir INCLUDE_MIO_FILE
# Include "mio_file.h"
# Endif