2012-06-25 15 views
14

(io sono un principiante di cacao e) mi chiedo il motivo per cui dovremmo fare:intesa NSLog sintassi

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

e non qualcosa di simile:

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

Perché la seconda istruzione chiama il metodo 'outputThis: param:' sull'oggetto 'NSLog'. 'NSLog' è solo una funzione nel framework Cocoa. – Eimantas

+0

sì, ma avrebbe potuto essere un metodo di classe per una classe NSLog, come [NSString stringWithString: @ "this is a string"]; ? – tahir

+0

NSLog non "suona" come classe. NSLogger sarebbe stata una scelta migliore per un nome di classe. Ora è solo un'azione. – Eimantas

risposta

18

Sono d'accordo che questo è piuttosto confuso quando si inizia. Il motivo principale è che il metodo NSLog, come molti altri in Core Foundation, è un'AP basata su C, piuttosto che un'API Objective-C. Le funzioni in stile C assomigliano a questo myFunction (myParameter1, myParameter2).

Tutta la roba della GUI probabilmente utilizzata per [UIView presentModalViewController:] ecc è basata su un'API Objective-C, con le parentesi quadre che hai visto per le funzioni (chiamate selettori in Obj-C). Il linguaggio Objective-C si trova in cima a C, quindi nella maggior parte delle app troverai entrambi gli stili.

+0

Apple decide tutto, e ci piace – onmyway133

5

Da quanto ho capito, NSLog non è una funzione Objective C ma una funzione C integrata nelle basi di Cocoa. Pertanto è conforme alle funzioni di base C con argomenti variadici.

4

NSLog maggio sembrano come una classe, ma non lo è.

NSLog è una funzione FoundationKit per la stampa di istruzioni di debug alla console . Essa è definita in NSObjCRuntime.h:

void NSLog(NSString format, ...); 

C'è una buona quantità di informazioni qui: http://cocoadev.com/wiki/NSLog

EDIT: Come @fyngyrz ha sottolineato, la pagina è morto. Quindi here is a wayback-machine version of the page from 2012

+1

No, non c'è. La pagina è sparita. – fyngyrz

+0

@fyngyrz Grazie. Modificato la risposta. – Alladinian