Hem OS X hem de iOS'ta, Apple, 32 bit sistemlerde float
ve 64 bit sistemlerde double
otomatik olarak almak için CGFloat typedef'i kullanır. Fakat normal Unix matematik fonksiyonlarını kullanırken, duruma göre bu kararı vermeniz gerekir. CGFloat tabanlı matematik işlevleri?
floor()
fonksiyonu şu şekilde tanımlanır:
double floor(double x);
gibi floorf()
fonksiyonu tanımlamaktadır: I cihazlar bugün 32 bit olan tüm IOS bilmek
float floorf(float x);
, ancak CGFloat kullanmanın nedeni, ilk 64 bit iOS devic olduğunda otomatik olarak iyileştirilmiş hassasiyet elde etmektir. (iPad 5?) tanıtıldı ve herhangi bir kodu değiştirmeye gerek yok.
CGFloat Floor(CGFloat x);
CGFloat
'u iOS'ta
float
bölümleri ile birlikte kullandığından şüpheleniyorum, ancak 64 bitlik bir iOS aygıtı için derleme (ve kod tabanınızın iki farklı sürümünü ele alırsanız, her satırı bir matematik işleviyle değiştirmek için "ihtiyacınız" gerekir).
Ya da her yerde CGFloat
yerine float
'u kullanabilir ve 64 bit iOS için endişelenmezsiniz. Ama sonra Apple'ın kütüphaneleri ve IMHO çirkin kodları ile tutarsızlık alırsınız.
Veya double
bölümleri ile birlikte CGFloat
kullanın ve derleyicinin her zaman çift ve float arasında geçiş yapmasına izin verdiğiniz alanı ve performansı yakalayın. Ve olası "32 Bit Tipine örtük dönüştürme" uyarılarını önemsememek.
Ya da belki en iyi strateji
, iOS hiçbir 64-bit sürümünde bahis şimdiye kadar gelmesi (ya da en azından yakın bir gelecekte yeterli) ve Unix matematik fonksiyonlarınınfloat
-sürümleri birlikte
CGFloat
kullanmak ve endişesi olmayacak geleceği.
Hangi stratejiyi kullanıyorsunuz?
Teşekkürler! #include'u kullanmak aklımda olanı ve aynı zamanda standart bir çözümdür (C99'un bir parçası). Görünüşe göre 'da "tg", Tip Jenerik anlamına gelir. Bana sorarsan, Apple tarafından dokümanlar tarafından belirtilmelidir. –