Non è necessario eseguire il cast su nulla se gli specificatori di formato corrispondono ai tipi di dati. Vedere la risposta di Martin R per la quale i tipi nativi NSInteger
sono definiti come.
Così su OS X a 64 bit, è possibile scrivere le sue dichiarazioni di log in questo modo:
NSLog(@"%ld", myInt);
mentre su iOS si può scrivere:
NSLog(@"%d", myInt);
e sarà tutto il lavoro senza calchi.
Un motivo per utilizzare cast comunque, almeno nel codice non UI, è che il buon codice tende a essere trasferito su piattaforme e se si esegue il cast delle variabili in modo esplicito si compilerà in modo pulito su 32 e 64 bit:
NSLog(@"%ld", (long)myInt);
Questo aiuterà anche il tuo codice iOS in una transizione a 64 bit, dovrebbe mai venire su iOS. O quando iOS e OS X si fondono insieme lungo la linea.
E si noti che questo non vale solo per le istruzioni NSLog, che sono dopotutto strumenti di debug, ma anche per [NSString stringWithFormat:]
e amici, che sono elementi legittimi del codice di produzione.
@DanielLee, se si utilizza 'NSLog (@ "% ld", (lungo) myInt)', il Il cast 'long' è quello di farlo coincidere con il qualificatore' l' di '% ld', ma tutto ciò non è necessario poiché' NSLog (@ "% d", myInt); 'è sufficiente (dato che possiamo vedere che 'myInt' non è' long'. Bottom line, tu metti 'myInt' se usi un lungo qualificatore nella stringa di formato, ma non c'è bisogno di usare il qualificatore di formato stringa lungo o cast' long' qui. – Rob
Apparentemente, non è vero che NSLog (@ "% i", myInt); è sufficiente perché visualizzerai il messaggio di errore come mostrato sopra. –
@DanielLee Vedi il commento di Martin R. Hai postato la tua ricerca n con tag iOS (dove 'NSInteger' è _not_ lungo), ma sembra che tu stia compilando con OS X target (dove' NSInteger' _is_ 'long'). – Rob