В OS X и iOS Apple использует CGFloat typedef для автоматического получения float
в 32-битных системах и double
в 64-разрядных системах. Но при использовании обычных математических функций Unix вам необходимо принять это решение в каждом конкретном случае.
Например, функция floor()
определяется как:
double floor(double x);
и функция floorf()
определяется как:
float floorf(float x);
Я знаю, что все устройства iOS сегодня 32-разрядные, но причина использования CGFloat заключается в том, чтобы автоматически получать улучшенную точность при вводе первых 64-разрядных устройств iOS (iPad 5?) и не изменять код. Но чтобы сделать это возможным, нам нужны математические функции на основе CGFloat:
CGFloat Floor(CGFloat x);
Существуют ли какие-либо функции в iOS или сторонних библиотеках? Или как другие разработчики справляются с этим? Я подозреваю, что большинство из них либо используют CGFloat
вместе с float
-версиями в iOS, но затем вам потребуется "изменить" каждую строку с помощью математической функции, если компилировать для 64-битного устройства iOS (и обрабатывать две разные версии вашей базы кода).
Или вы могли бы просто использовать float
вместо CGFloat
всюду и не беспокоиться о 64-разрядной iOS. Но тогда вы получите несогласованность с библиотеками Apple и более ужасным кодом IMHO.
Или вы могли бы использовать CGFloat
вместе с double
-версиями и просто использовать пространство и производительность, позволяя компилятору конвертировать между double и float все время. И не заботятся о возможных предупреждениях "Неявное преобразование в 32-битный тип".
Или, может быть, лучшая стратегия, ставка на 64-битную версию iOS когда-либо появится (или, по крайней мере, в ближайшем будущем) и используйте CGFloat
вместе с float
-версиями математических функций Unix, а не беспокоясь о будущем.
Какую стратегию вы используете?