Преимущества использования NSInteger над int?

Я пытаюсь понять, как влияет развитие на развитие как для 32-разрядных, так и для 64-разрядных архитектур. Из того, что я исследовал до сих пор, я понимаю, что int всегда 4 байта, независимо от архитектуры устройства, использующего приложение. Но NSInteger имеет 4 байта на 32-битном устройстве и 8 байтов на 64-битном устройстве. У меня NSInteger впечатление, что NSInteger «безопаснее» и рекомендуется, но я не уверен, для чего это нужно.

Мой вопрос: если вы знаете, какое возможное значение вы используете, никогда не будет большим (возможно, вы используете его для индексации в массив из 200 элементов или для хранения количества объектов в массиве), почему его определяют как NSInteger ? Это займет 8 байтов, когда вы не будете использовать все это. Лучше ли определять это как int в этих случаях? Если да, то в каком случае вы хотели бы использовать NSInteger (в отличие от int или long т. Д.)? Очевидно, что если вам нужно использовать большие числа, вы можете использовать 64-битную архитектуру. Но если вам нужно было работать и на 32-битных устройствах, вы бы long long не пользовались, потому что это тоже 8 байтов на 32-битных устройствах? Я не понимаю, почему нужно использовать NSInteger , по крайней мере, при создании приложения, работающего на обеих архитектурах.

Также я не могу придумать метод, который принимает или возвращает примитивный тип – int , и вместо этого использует NSInteger , и мне интересно, есть ли в нем больше, чем просто размер значений. Например, (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section . Я хотел бы понять, почему это так. Предполагая, что можно иметь таблицу с 2 147 483 647 рядами, что произойдет на 32-битном устройстве, когда вы добавите еще один – обернется ли она до -2,147,483,647? А на 64-битном устройстве это будет 2 147 483 648. (Зачем возвращать знаковое значение? Думаю, оно должно быть без знака, потому что у вас не может быть отрицательного числа строк.)

В конечном счете, я хотел бы получить лучшее представление о фактическом использовании этих типов данных числа, возможно, некоторые примеры кода были бы замечательными!

4 Solutions collect form web for “Преимущества использования NSInteger над int?”

Я лично считаю, что 64-битная на самом деле причина существования для NSInteger и NSUInteger; до 10,5 таких случаев не существовало. Эти два просто определяются как longs в 64-битных и как ints в 32-битных.

NSInteger / NSUInteger определяются как * dynamic typedef * s для одного из этих типов, и они определяются следующим образом:

 #if __LP64__ || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif 

Таким образом, используя их вместо более простых типов C, если вы хотите «бит-родной» размер.

Я предлагаю вам прочитать эту ссылку. У CocoaDev есть дополнительная информация.

Для правильного спецификатора формата, который вы должны использовать для каждого из этих типов, см. Раздел «Руководство по программированию строк» ​​в разделе «Зависимости платформы»

Я помню, когда посещал конференцию разработчиков iOS. вы должны взглянуть на тип данных в iOS7. например, вы используете NSInteger в 64-битном устройстве и сохраняете его в iCloud. то вы хотите синхронизировать с более низким устройством (например, iPad 2-го поколения), ваше приложение не будет вести себя одинаково, поскольку оно распознает NSInteger в 4 байтах, а не 8 байтах, тогда ваш расчет будет неправильным.

Но до сих пор я использую NSInteger потому что в основном мое приложение не использует iCloud или не синхронизируется. и избегать предупреждения компилятора.

Apple использует int, потому что для переменной управления циклом (которая используется только для управления итерациями цикла) тип int datatype прекрасен, как в размере типа данных, так и в значениях, которые он может удерживать для вашего цикла. Здесь нет необходимости в зависимом от платформы типе данных. Для переменной управления циклом большую часть времени будет выполнять даже 16-битный int.

Apple использует NSInteger для возвращаемого значения функции или для аргумента функции, поскольку в этом случае имеет значение тип данных [размер], поскольку то, что вы делаете с функцией, – это передача / передача данных с другими программами или с другими фрагментами кода.

Apple использует NSInteger (или NSUInteger) при передаче значения в качестве аргумента функции или возврата значения из функции.

Единственное, что я хотел бы использовать для NSInteger for, – это передавать значения в и из API, который его специфицирует. Кроме того, он не имеет преимущества перед int или долго. По крайней мере, с помощью int или long вы знаете, какие спецификаторы формата использовать в printf или аналогичной инструкции.

Как продолжение ответа Ирфана: sizeof (NSInteger) равен размеру процессорного слова. Для процессора намного проще и быстрее работать со словами

  • NSInteger подсчитывает раз 4?
  • Как сравнить два NSInteger?
  • Изменение типа параметра для методов делегата
  • NSInteger - 32-битное целое число
  • Interesting Posts

    Просмотр iOS Viewer в представлении UIViewController?

    Предоставляет ли Facebook iOS SDK пользователю аутентификацию каждый раз, когда они используют приложение?

    Уведомления iOS. Какой из них использовать?

    проверьте, прокручивается ли UIWebView на дно

    tableFooterView не выравнивается должным образом в нижней части таблицы

    Дальнейшее разъяснение «Как реализовать UISearchController с целью c»

    Настройка субтитров с помощью AVPlayer

    Как обнаружить с помощью CoreBluetooth, когда периферия исчезает?

    Удалить индикатор страницы из UIPageViewController

    Как регистрировать штрихи на другом представлении, когда пользователь перетаскивает свой палец в новый?

    Как выбрать базу данных SQLite и использование в памяти

    Запустите приложение facebook из моего приложения и сделайте его открытым профилем, который не является моим

    XE8 iOS Simulator не откроет приложение

    iOS с Google Maps

    AVMutableComposition сплошного цвета без AVAsset

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.