Неправильно ли использовать int в Cocoa и CocoaTouch? - PullRequest
3 голосов
/ 01 декабря 2009

В чем преимущество использования в коде что-то вроде NSInteger вместо int? Я часто вижу это в примерах, включая официальные примеры кода Apple.

Ответы [ 3 ]

3 голосов
/ 01 декабря 2009

Здесь на SO.com есть похожий вопрос: В Какао вы предпочитаете NSInteger или int, и почему? Я предпочитаю использовать NSInteger, потому что он ориентирован на будущее, теперь Apple использует его более int и это рекомендуемый способ ведения дел.

Но это не «неправильно» использовать int.

3 голосов
/ 01 декабря 2009

Я почти уверен, что NSInteger и NSUInteger были изобретены для решения проблем 64-битного квантования в Mac OS (они гарантированно имеют правильный размер, независимо от того, какую архитектуру вы строите). Я не думаю, что имеет значение, что вы используете на iPhone, хотя я привык бы использовать NS -типы Apple.

В любом случае, если вы когда-нибудь перенесете свой код на Mac OS, это будет проще.

2 голосов
/ 01 декабря 2009
  • В 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-байтовые целые числа являются избыточными для многих целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...