- В 32-битном коде (включая iPhone):
int
- 4 байта, long
- 4 байта, указатели - 4 байта
- В 64-битном коде:
int
- 4 байта, long
- 8 байтов, указатели - 8 байтов
Многие существующие API (неправильно, по историческим причинам) использовали int
в 32-битном режиме, но должны использовать long
в 64-битном режиме.
В C int
и long
не являются эквивалентными типами, поэтому, если вы используете int
, вы можете быть несовместимы с 64-битным API, а если вы используете long
, вы можете быть несовместимы с 32 API При использовании NSInteger
ваш код будет совместим как с 32-битными, так и с 64-битными версиями этих API.
Так что, если вы используете API, который определяет NSInteger, то вы должны использовать NSInteger.
В вашем собственном коде и ваших собственных API:
- Если вам нужно 4-байтовое целое число, используйте
int
- Если вам нужно целое число размером с указатель, используйте
long
или NSInteger
- если вам нужно 8-байтовое целое число, используйте
long long
Причина, по которой вы не обязательно используете NSInteger для всего, состоит в том, что 8-байтовые целые числа являются избыточными для многих целей.