2014-11-04 1 views

ответ

1

Из заголовков от Apple:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
typedef unsigned long NSUInteger; 
#else 
typedef int NSInteger; 
typedef unsigned int NSUInteger; 
#endif 

Так тип NSInteger либо INT или долго, в зависимости от целевой платформы. Вы не получаете предупреждение, когда не выполняете бросок, потому что вы, скорее всего, работаете на 64-битной платформе. Если вы нацелитесь на 32-битную платформу, вы получите предупреждение без актерского состава.

Вы можете использовать% zd, который будет работать без использования на 32-битных и 64-битных платформах (но только для целых чисел со знаком).

Вы можете сделать что-то вроде этого, и никогда не беспокоиться об этом (но есть падение производительности):

NSInteger myNSInteger = 12345; 
[NSString stringWithFormat:@"%@", @(myNSInteger)]; 
0

Зависит от устройства в тренажере: С iPhone 5 или менее, NSInteger 32 бит и% d в порядке, если вы используете% ld, вы должны использовать с (long). С iPhone 5S или более, NSInteger - 64 бит, а% ld - в порядке.

Лучший вариант, чтобы не иметь никакого предупреждения, - ld и cast all (long).