Я пытаюсь понять, как влияет развитие при разработке как для 32-разрядной, так и для 64-разрядной архитектуры. Из того, что я исследовал до сих пор, я понимаю, что int всегда 4 байта, независимо от архитектуры устройства, на котором запущено приложение. Но NSInteger составляет 4 байта на 32-битном устройстве и 8 байтах на 64-битном устройстве. Я получаю впечатление, что 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. (Зачем возвращать знаковое значение? Я думаю, что он должен быть без знака, потому что у вас не может быть отрицательного числа строк.)
В конечном счете, я хотел бы получить лучшее представление о фактическом использовании этих типов данных числа, возможно, некоторые примеры кода были бы замечательными!