<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 el otro, su presencia se hará sentir aun 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 necesario eliminar, de alguna manera, todas las filas de NSLog() de nuestro código, o porque ya no es necesario, y porque las llamadas a NSLog() puede afectar al rendimiento de nuestra aplicación, especialmente si usted ha hecho NSLog() para 'bucle interior.
Excluimos a la vez la solución de la "búsqueda" y "cancelar" porque un día podría servir de nuevo. También excluimos la solución de la "búsqueda" y "comentarios" incómodos por la misma razón que antes. Afortunadamente, un lugar limpio, simple, y están usando las sentencias condicionales correctas del compilador. Lo que vamos a hacer en la práctica, y decirle al compilador que excluir - si se produce un cierto estado - al compilar nuestras líneas de código que contienen NSLog() .
Las directivas de compilación y sentencias condicionales del compilador, son una muy poderosa y generalizada. Si viene desde el desarrollo ANSI-C los conoce muy bien y sin duda utilizzte en muchas situaciones. La peculiaridad de estas "instrucciones" radica en el hecho, ya mencionado, para ser visto por el compilador y no es 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, según lo anunciado, le 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 / / Si se define la constante ACTIVE_NSLOG llenar / / El bloque de código entre # ifdef y # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... bla, bla"); # Endif |
). Sentencias condicionales del compilador son parte de la misma familia que el #define , también, de hecho, están precedidas por una "libra" ( # ). solo se ACTIVE_NSLOG è definito. En este ejemplo hemos definido una constante ACTIVE_NSLOG , las líneas siguientes de código indica al compilador de "incluir" línea NSLog() sólo si ACTIVE_NSLOG está definido. Si tuviéramos el cuidado, durante la redacción de nuestro código para insertar llamadas a NSLog() dentro del bloque #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , sólo tiene que borrar la definición de la constante ACTIVE_NSLOG para deshacerse de la próxima compilación, todo nuestro NSLog() .
Una solución mejor y última
Vamos a ver cómo configurar el entorno XCode para mejorar aún más lo que hemos hecho aquí! En primer lugar, se elige un nombre de constante que vamos a utilizar en nuestros proyectos para excluir de la recopilació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.

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

Seleccione la pestaña Build, compruebe que en la configuración Debug (esta es la joya), vaya a la sección definida por el usuario y añadir, con el botón en la parte inferior izquierda, un nuevo campo llamado OTHER_CFLAGS . En este assegnamoli el valor -DMIO_DEBUG=1 . La sintaxis es -D{mia define}=1 .
Este procedimiento tiene dos ventajas:
- No se debe incluir en el código
#define MIO_DEBUG 1, pero lo hacemos a través de la información del proyecto. Así que, cuando vamos a llenar la versión de lanzamiento (el uno sin elNSLog()), no hay que olvidar que eliminar la línea#define MIO_DEBUG 1 - La constante se define en relación con la configuración, en nuestro caso de depuración. Por lo tanto, el cambio en 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. Sentencias condicionales compilador puede ayudar en una amplia gama de contextos. Se utilizan a menudo por los programadores para determinar el tipo de sistema operativo, la versión, el objetivo, 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 para intervenir en otras áreas del código:
1 2 3 4 5 6 7 8 9 10 | / / Depurar en caso de ganar el juego / / Con una puntuación de 100 en lugar de 10.000 :) # Ifdef MIO_DEBUG score == 100 ) if (puntuación == 100) # Else score == 10000 ) if (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 | / / En general existe # Si la expresión / / Si similar a la tradicional, así que con una expresión llena / / Comprobar si se ha definido una constante # Ifdef constante / / Comprobar si NO es una constante definida # Ifndef constante / / Else # Else / / Fin del 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 este otro # 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 |










No hay comentarios para este post
Deja un comentario