2015-02-26 2 views
0

У меня возникли трудности с пониманием разницы в размерах типов данных.Основные данные Тип атрибута Различия

У меня есть атрибут displayOrder с типом Integer 16. Я использую этот атрибут для поддержания порядка отображения таблицыViewCells, добавленного пользователем в tableView. Я устанавливаю значение с равными числами «1, 2, 3», и он работает нормально.

Но есть также много других вариантов, как Integer 32, Integer 64, Decimal, Float и Double. Я сделал свое собственное исследование и обнаружил, что Float может иметь десятичную точку, а Double вдвое больше размера Float (не уверен, что разница между Decimal и Float).

Мой вопрос в том, что различия между ними - это просто размер, значит ли это, что я должен беспокоиться о том, что displayOrder идет, например, «1000», и он будет превышать бит Integer 16 (Сколько-нибудь превысит размер?), и поэтому я должен использовать вместо этого Integer 32? И если я установил его на Integer 64, и если displayOrder всего лишь «1», мне нужно беспокоиться о медленной производительности?

Я видел документы NSAttributeType, но не уверен, что означают числа.

Благодаря

ответ

2

Я думаю, что @choppin означает, что скорость мудрая не будет иметь большого значения. Размер мудрый он очень много делает, int16 составляет половину от размера int32, и наличие тонны int32, когда вам нужно только int16s, будет иметь больший объем памяти. Число здесь представляет собой количество бит, которое переменная занимает в памяти.

Если у вас будет только пара, не беспокойтесь об этом, но если у вас будет большой набор данных, это станет проблемой.

Кроме того, если номер, который вы будете хранить, может быть очень большим, тогда вам понадобится более крупный вариант, например, int32 может хранить 4 294 967 296 или половину этого, если Int подписан, по умолчанию. Если вы перейдете к максимальному размеру подписанного числа int, число будет округлено, будет отрицательным или будет 0 для подписанного int.

Поскольку память является проблемой на мобильном устройстве, то какой вариант вы выбираете, требует, хотя это требует меньше, чем несколько лет назад.

+0

Что произойдет, если подписанный int будет отрицательным или 0 или если unsigned int превышает число? Атрибут становится нулевым? – SFF

+0

Они обертываются. Беззнаковый int положителен и он будет идти либо к 0, либо к самому большому числу в зависимости от того, какое значение он имеет и каким образом он перемещается, добавляя или вычитая. Подписанные ints будут идти от максимального положительного до максимального отрицательного или наоборот, в зависимости от его значения, и если вы добавляете или вычитаем.Если вы посмотрите на него, как на петлю, это легко понять. Максимальные и минимальные значения связаны друг с другом. Добавьте 1 к максимуму, и вы получите мин. Вы можете пойти в любом случае в этом цикле. –

+0

Я, вероятно, должен более подробно о подписанных ints и unsigned ints. Извините, я до сих пор не совсем понимаю это. Если бы я понял, что правильно, если я использую Int16, он будет использовать меньше памяти.Но если числа обернутся вокруг, значит ли это, что это не вызовет каких-либо проблем, когда данные хранятся больше, чем Int16 ?? Тогда в чем смысл использования более крупных типов Int32 и Int64? Спасибо за вашу помощь. – SFF

1

Это не должно сделать огромную сделку по производительности, который вы используете один, но я бы придерживаться целого числа 32. Это дает вам 2 к силе 32 значений (которые должны быть более чем достаточно для порядок отображения)

+0

Спасибо за ваш ответ. Тем не менее, я не понимаю, почему Apple добавила возможность выбирать между разными размерами, если это не имеет никакого значения. Я стараюсь потратить слишком много времени на эти мелочи :( – SFF

Смежные вопросы