Artículos con la etiqueta 'NSLog ()'

Objective-C: NSLog () de C struct

o CGPoint , ad esempio. La sintaxis NSLog(@"%@", ... ); que funciona y se utiliza para obtener información sobre los objetos, pero no funciona en C tipos de datos tales como la estructura CGRect o CGPoint , por ejemplo. o NSStringFromCGPoint : Para aprovechar NSLog(@"%@", ... ); también de tipo C. estructuras que pueden apoyarse en funciones de conversión como NSStringFromCGRect() o NSStringFromCGPoint :

1
2
3
4
5
CGRect ) { 10 , 20 , 30 , 40 } ; CGRect mioRect = (CGRect) {10, 20, 30, 40};
CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
/ /
"Info rettangolo: %@" , NSStringFromCGRect ( mioRect ) ) ; NSLog (@ "rectángulo de Información:% @", NSStringFromCGRect (mioRect));
"Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "punto de información:% @", NSStringFromCGPoint (mioPoint));

En concreto, es posible perfeccionar los procedimientos correspondientes macros útiles pequeños, como:

1
# Definir NSLogRect (Rect) NSLog (@ "% s (% 0.0f,% 0.0f) 0.0f% 0.0fx%", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height)

O bien:

1
2
3
4
# Definir NSLogCGPoint (punto) NSLog (@ "% s (% 0.0f,% 0.0f)", # punto.x punto, Point.y)

CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64};
; NSLogCGPoint (mioPoint);

Esto dará como resultado:

1
32 , 64 ) mioPoint: (32, 64)

Más información ...

Cómo eliminar NSLog () de la fuente de XCode

<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.

getinfo

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

userdefine

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:

  1. 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 el NSLog() ) debemos recordar para eliminar la línea #define MIO_DEBUG 1
  2. 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

Más información ...

Seguimiento Actionscript, Objective-C NSLog ()

, usata per il debug delle applicazioni. Tomando el puesto de ActionScript a Objective-C (donde se coloca el código y la comparación de la sintaxis de ActionScript y Objective-C) en Actionscript tenemos la conveniente función trace ( ) , que se utiliza para aplicaciones de depuración. Esta función genera una salida para el medio ambiente consola Adobe desarrollo flash. Se utiliza principalmente durante el desarrollo y ensayo de "película" / aplicación. En XCode / Objective-C tenemos: NSLog ( ) . di Actionscript: La sintaxis de esta función es muy similar a la trace ( ) en Actionscript:

1
"Sono una linea di debug" ) ; NSLog (@ "Soy una línea de depuración");

En ActionScript, tenemos:

1
"Sono una linea di debug" ) ; trace ("Soy una línea de depuración");

Aparte del uso de la arroba (@), como se puede ver, son idénticos. Las diferencias (y similitudes) comienzan cuando se quiere mostrar los valores de las variables, por ejemplo, en ActionScript tenemos:

1
2
3
"Coordinata x:" + x + " coordinata y:" + y ) ; trace ("coordenada x:" + x + "coordenada:" + y);
/ / O
"Coordinate: " , x , y ) ; trace ("coordenadas" x, y);

En Objective-C tenemos:

1
"Coordinata x:%i coordinata y:%i" , x, y ) ; NSLog (@ "coordenada x: la coordenada%% i", x, y);

che opera sull'Apple System Log. Nota: NSLog() en realidad llama a la función más genérica NSLogv ( ) que funciona en el registro del sistema de Apple. Las funciones son idénticas, de hecho, sólo cambiando los parámetros de entrada.

o sprintf ( ) . Los desarrolladores de C se encuentra muy familiarizado con el formato de cadenas, al igual que printf ( ) o sprintf ( ) . Para obtener más información, consulte especificadores de formato de cadena .

Más información ...


Deje de SOPA