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