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