Преимущества использования 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) равен размеру процессорного слова. Для процессора намного проще и быстрее работать со словами

  • Альтернативы типу casting при форматировании NS (U) Integer на 32 и 64-разрядных архитектурах?
  • NSInteger - 32-битное целое число
  • Как сравнить два NSInteger?
  • Когда использовать NSInteger против int
  • Interesting Posts

    – Могу ли я передать ноль для объекта?

    Сдвиг контроллера снизу с помощью жестов

    есть ли способ использовать библиотеку Objective-C в C?

    NSString URL-декодирование?

    Загрузка файлов в последовательном порядке с использованием NSURLConnection в iOS

    Flash-строитель – Можно ли напрямую скомпилировать устройство с бесплатной учетной записью Apple?

    UIButton .setImage () не работает в Swift 3

    UILocalizedIndexedCollation для японцев, дающих разные заказы для контактов / музыкальных приложений

    GMSMarker не отображается в 1.3

    Шифрование данных с помощью Core Data в iOS

    Как распечатать имя метода и номер строки в быстром

    Случайный 256-битный ключ с использованием SecRandomCopyBytes () в iOS

    Можно ли исключить кнопку «Больше» в UIActivityViewController?

    iOS – запрос веб-службы после задержки

    использовать pdfs как источник текстур в редакторе уровней спрайтов Xcode 6

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