2012-06-25 19 views
14

(soy un principiante cacao y) Me pregunto por qué debemos hacer:entendimiento NSLog sintaxis

NSLog(@"this is the variable value: %d",variable); 

y no algo como esto:

[NSLog outputThis:@"this is the variable value: %d" param:variable]; 
+1

Porque la segunda instrucción llama al método 'outputThis: param:' en el objeto 'NSLog'. 'NSLog' es solo una función en Cocoa framework. – Eimantas

+0

sí, pero podría haber sido un método de clase para una clase NSLog, como [NSString stringWithString: @ "this is a string"]; ? – tahir

+0

NSLog no "suena" como clase. NSLogger hubiera sido una mejor opción para un nombre de clase. Ahora es solo una acción. – Eimantas

Respuesta

18

Estoy de acuerdo, esto es bastante confuso cuando estás comenzando. La razón principal es que el método NSLog, como muchos otros en Core Foundation, es una API basada en C, en lugar de una API de Objective-C. Las funciones estilo C se ven así myFunction (myParameter1, myParameter2).

Todas las cosas de la GUI a las que probablemente esté acostumbrado [UIView presentModalViewController:] etc se basan en una API Objective-C, con los corchetes que ha visto para funciones (llamados selectores en Obj-C). El lenguaje Objective-C se encuentra en la parte superior de C, por lo que encontrará ambos estilos en la mayoría de las aplicaciones.

+0

Apple lo decide todo, y nos gustará – onmyway133

5

Como yo lo entiendo, NSLog no es una función de Objective C, sino una función de C construida en la base de Cocoa. Por lo tanto, se ajusta a las funciones C básicas con argumentos variados.

4

NSLog puede parece como una clase, pero no lo es.

NSLog es una función FoundationKit para imprimir instrucciones de depuración en la consola . Se define en NSObjCRuntime.h:

void NSLog(NSString format, ...); 

hay una buena cantidad de información aquí: http://cocoadev.com/wiki/NSLog

EDIT: Como @fyngyrz señaló, la página está muerto. Entonces here is a wayback-machine version of the page from 2012

+1

No, no lo hay. La página se ha ido. – fyngyrz

+0

@fyngyrz Gracias. Editado la respuesta. – Alladinian