<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 muy útil durante 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, 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 líneas de NSLog() de nuestro código, porque no es necesario, ya sea porque las llamadas a NSLog() podría afectar el rendimiento de nuestra aplicación, sobre todo si ponemos NSLog() a la 'bucle interno.
Inmediatamente descartar la solución a la "mirada" y "cancelar" porque un día podría ser usado de nuevo. Se excluye también la solución de la "apariencia" y "comentarios", incómodos por la misma razón que antes. Afortunadamente, un limpio, sencillo y está usando los condicionales de compilación adecuadas. Lo que hacemos en la práctica, y decirle al compilador para excluir - si hay una condición específica - la hora de elaborar nuestras líneas de código que contienen NSLog() .
Las compilaciones de directivas e instrucciones del compilador condicional, es un muy poderoso y generalizado. Los que vienen desde el desarrollo de la norma ANSI-C sin duda saben muy bien y utilizzte en muchas situaciones. La peculiaridad de estas "Instrucciones" reside en el hecho, mencionado anteriormente, para ser vistos por el compilador y no pueden ejecutarse. Esta característica hace útiles en muchos casos y puede resolver los problemas de otro modo muy molesto.
Veamos un ejemplo de código que, como se predijo, se puede "borrar" mediante la compilación de fragmentos de código, en nuestro caso NSLog() :
1 2 3 4 5 6 | # Definir una ACTIVE_NSLOG / / Si la constante se define ACTIVE_NSLOG llenar / / Bloque de código entre # ifdef y # endif # Ifdef ACTIVE_NSLOG " ... bla bla" ) ; NSLog (@ "... bla, bla"); # Endif |
). Las instrucciones condicionales son parte del compilador de la misma familia que el #define , también, de hecho, están precedidas por una "libra" ( # ). solo se ACTIVE_NSLOG è definito. En el ejemplo mostrado, hemos definido una constante ACTIVE_NSLOG ; las líneas siguientes de código indica al compilador que "incluye" línea de NSLog() sólo si ACTIVE_NSLOG se define. Si nos ocupamos, durante la redacción de nuestro código, insertando llamadas a NSLog() dentro del bloque #ifdef ... #endif per far sparire, alla prossima compilazione, tutti i nostri NSLog() . #ifdef ... #endif , basta con borrar la definición de la constante ACTIVE_NSLOG a desaparecer, la siguiente compilación, toda nuestra NSLog() .
Una mejor y última
Veamos ahora cómo configurar el entorno XCode para mejorar aún más lo que hemos hecho aquí! En primer lugar, elegir un nombre de constante que utilizamos en nuestros proyectos de excluir de la compilación NSLog() . o quello che preferite. Usted puede elegir el nombre que usted quiera, desde DEBUG al MIO_DEBUG o lo que sea que usted prefiera. Abra el proyecto, nuevo o viejo. Coloque todos los NSLog() dentro del bloque (o bloques):
1 2 3 | # Ifdef MIO_DEBUG " ... bla bla" ) ; NSLog (@ "... bla, bla"); # Endif |
Seleccione el archivo principal de su proyecto, haga clic derecho y elegir la Obtener información.

Esto abre una ventana con información sobre el proyecto:

Seleccione la pestaña Generar, comprobar que está en configuración de depuración (esta es la joya), vaya a la sección definida por el usuario y agregar, a través del 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 debemos poner en el código
#define MIO_DEBUG 1, pero lo hacemos a través de la información del proyecto. Por lo tanto, cuando vamos a llenar la versión de lanzamiento (el uno sin elNSLog()) debemos recordar para 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. A continuación, pasar a la configuración de lanzamiento (release) va a estar ausente y las filas constantes con
NSLog()no se compila
Conclusiones
El procedimiento anterior puede ser útil en algunos casos otros moltidutine, con NSLog() , no tienen nada que hacer. Las instrucciones condicionales pueden ayudar a que el compilador en una amplia gama de contextos. A menudo se utilizan por los programadores para determinar el tipo de versión del sistema operativo, el objetivo, la presencia de los procesadores matemáticos, mientras se mantiene la misma "idéntico" fuente.
Para entender esto, como ejemplo, podemos utilizzre nuestro constante MIO_DEBUG también para intervenir en otras áreas del código:
1 2 3 4 5 6 7 8 9 10 | / / Debug si ganan el juego / / Con una puntuación de 100 en vez de 10000 :) # Ifdef MIO_DEBUG score == 100 ) if (puntaje == 100) # Else score == 10000 ) if (puntaje == 10000) # Endif { ; [HaiVinto mismo]; } |
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, hay una # Si la expresión / / Si la declaración similar a la tradicional, por lo que con una expresión completa / / Comprobar si una constante se define # Constante Ifdef / / Comprobar si NO es una constante definida # Ifndef constante / / Else # Else / / Cierre 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 / / Rellena el siguiente # Else / / En caso contrario rellene 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 |






Últimos Comentarios
Asunto : muy útiles por cierto! Lo he probado y es justo lo que necesitaba. Ahora me pregunto ¿cómo puedo obtener ...
Vik : Con la ayuda estratégica!
Pimienta : Hola, no sé si usted es uno de los creadores del plugin WP Bannerize. He visto un ...
Rosanna : ¿Puede alguien decirme cómo puedo eliminar la ventana de Snap Shots que se abre automáticamente cuando se me ...
bendito Maresca : No puedo descargar cualquier skypemote me spiegaaa