No tiene que emitir nada si sus especificadores de formato coinciden con sus tipos de datos. Consulte la respuesta de Martin R para obtener detalles sobre cómo NSInteger
se define en términos de tipos nativos.
Entonces, para el código destinado a ser construido para entornos de 64 bits, puede escribir sus declaraciones de registro de esta manera:
NSLog(@"%ld", myInt);
mientras que para entornos de 32 bits puede escribir:
NSLog(@"%d", myInt);
y todo funcionará sin yeso.
Una razón para usar conversiones de todos modos es que un buen código tiende a ser portado a través de plataformas, y si convierte sus variables explícitamente, se compilará limpiamente en 32 y 64 bits:
NSLog(@"%ld", (long)myInt);
Y tenga en cuenta que esto es cierto no solo para las declaraciones NSLog, que son solo ayudas para la depuración, sino también para [NSString stringWithFormat:]
los diversos mensajes derivados, que son elementos legítimos del código de producción.
NSLog(@"%ld", (long) myInt);
, ellong
reparto es para que coincida con ell
calificador de%ld
, pero todo eso es innecesario, ya queNSLog(@"%d", myInt);
es suficiente (dado que podemos ver quemyInt
no eslong
. En pocas palabras, se echómyInt
si se utiliza mucho en el formato de clasificación cadena, pero no es necesario usar el calificador de formato de cadena larga olong
emitir aquí.NSInteger
es larga), pero parece que está compilando con el objetivo de OS X (donde está ).NSInteger
long