Вам не нужно приводить что-либо, если ваши спецификаторы формата соответствуют вашим типам данных. См. Ответ Мартина Р. для получения подробной информации о том, как NSInteger
определяется в терминах нативных типов.
Таким образом, для кода, предназначенного для построения для 64-битных сред, вы можете написать свои операторы журнала следующим образом:
NSLog(@"%ld", myInt);
в то время как для 32-битных сред вы можете написать:
NSLog(@"%d", myInt);
и все это будет работать без приведения.
В любом случае, одна из причин использования приведений заключается в том, что хороший код имеет тенденцию переноситься на разные платформы, и если вы явно приведете свои переменные, он будет скомпилирован чисто как в 32-, так и в 64-разрядных системах:
NSLog(@"%ld", (long)myInt);
И обратите внимание, что это верно не только для операторов NSLog, которые, в конце концов, просто являются средствами отладки, но также для [NSString stringWithFormat:]
различных производных сообщений, которые являются законными элементами производственного кода.
NSLog(@"%ld", (long) myInt);
,long
приведение в соответствие сl
классификатором%ld
, но все это не нужно, так какNSLog(@"%d", myInt);
достаточно (учитывая, что мы видим, чтоmyInt
это не такlong
. Нижняя строка, вы приводите,myInt
если использовать длинный классификатор в формате строка, но не нужно использовать ни спецификатор формата длинной строки, ниlong
приведение здесь