2010-07-09 1 views
4

[Возможно, я не понимаю всю эту тему, так как я вырос с помощью языков, которые позволяют разработчику почти полностью игнорировать архитектуру процессора, например Java, за исключением некоторых конкретных случаев. Пожалуйста, исправьте меня, если у меня есть некоторые из неправильных понятий.]Использовать CGFloat вместо float? Они не делают этого

Чтение here, кажется, что совет использовать CGFloat вместо, скажем, поплавок, потому что будущие доказательства моего кода для различных архитектур процессоров (64-разрядные ручки плавать по-разному). Предполагая, что это правильно, то почему UISlider, например, используют float напрямую (для значения)? Не было бы неправильно (или что-то) для меня прочитать их float и преобразовать его в CGFloat, потому что в любом случае мой код не прав, если архитектура все равно изменится?

ответ

6

CGFloat всего лишь typedef для float. Это обеспечивает гибкость для CGFloat, чтобы быть чем-то другим в будущем. Именно поэтому использование этого будущего защищает ваш код. Objective-C делает это со многими типами, еще одним примером является NSInteger.

Хотя они могут использоваться как взаимозаменяемые, я согласен с тем, что в случае UISlider не указано, что Apple была dogfooding.

+0

+1 так что, по-вашему, последствия для кода, который читается и записывается в значение на слайдере? Просто используйте float? –

+0

Я говорю, если это 'float' use' float';) Консистенция здесь важна. В идеале это будет «CGFloat». –

2

CGFloat является частью Core Graphics и используется для таких вещей, как пиксельные значения, которые сильно изменились с годами (кто-нибудь здесь любит TRS-80?). SO, используя CGFloat для связанных с отображением значений чертежа.

Значение ползунка не связано с графикой. Это просто 0.0 до 1.0, который можно обрабатывать точно с помощью float и, возможно, с 16-битным поплавком.

+0

Итак, float float float, даже если архитектура меняется? –

+0

что плавать на самом деле зависит от архитектуры (см. Endianess). С точки зрения программирования вы всегда можете быть уверены, что он будет работать так же. Аналогично, CGFloat всегда даст вам хороший результат для вычислений, связанных с компьютером, независимо от фактического отображения и архитектуры. – PapaSmurf