iOS ve macOS için Yerel Türler
Mac ve iOS API'leri, 32 bit platformlarda her zaman 32 bit ve 64 bit platformlarda 64 bit olan mimariye özgü veri türlerini kullanır.
Örneğin, Objective-C veri türünü int32_t
32 bit sistemlerde ve int64_t
64 bit sistemlerde ile eşlerNSInteger
.
Bu davranışı eşleştirmek için, birleşik API'mizde önceki kullanımlarını int
(.NET'te her zaman olduğu System.Int32
gibi tanımlanır) yeni bir veri türüyle değiştiriyoruz: System.nint
. "n" değerini "yerel" olarak düşünebilirsiniz, dolayısıyla platformun yerel tamsayı türü.
Bu yeni veri türleriyle, derleme bayraklarınıza bağlı olarak 32 bit ve 64 bit mimariler için aynı kaynak kodu derlenir.
Yeni Veri Türleri
Aşağıdaki tabloda, veri türlerimizde bu yeni 32/64 bit dünyayla eşleşecek değişiklikler gösterilmektedir:
Yerel Tür | 32 bit yedekleme türü | 64 bit yedekleme türü |
---|---|---|
System.nint |
System.Int32 (int ) |
System.Int64 (long ) |
System.nuint |
System.UInt32 (uint ) |
System.UInt64 (ulong ) |
System.nfloat |
System.Single (float ) |
System.Double (double ) |
C# kodunuzun bugün göründüğü gibi az çok görünmesine izin vermek için bu adları seçtik.
Örtük ve Açık Dönüştürmeler
Yeni veri türlerinin tasarımı, tek bir C# kaynak dosyasının konak platformuna ve derleme ayarlarına bağlı olarak doğal olarak 32 veya 64 bit depolama kullanmasını sağlamak için tasarlanmıştır.
Bu, platforma özgü veri türlerine ve bu veri türlerinden .NET tam sayı ve kayan nokta veri türlerine örtük ve açık dönüştürmeler kümesi tasarlamamızı gerektirdi.
Örtük dönüştürme işleçleri, veri kaybı olasılığı olmadığında (32 bit değerlerin 64 bit alanda depolanması) sağlanır.
Açık dönüştürme işleçleri, veri kaybı olasılığı olduğunda (64 bit değer 32 veya potansiyel olarak 32 depolama konumunda depolanıyor) sağlanır.
int
ve uint
tümü örtük olarak olarak dönüştürülebilir nint
nuint
nfloat
ve 32 bit her zaman 32 veya 64 bit olarak sığar.float
nint
ve nuint
örtük olarak olarak dönüştürülebilir long
ulong
double
ve 32 veya 64 bit değerleri her zaman 64 bit depolama alanına sığar.nfloat
Yerel türler 64 bit depolama alanı barındırabileceğinden , ve float
int
nfloat
uint
ile arasında açık dönüştürmeler nint
nuint
kullanmanız gerekir.
yerel türler yalnızca 32 bit depolama alanı tutabileceğinden, ve 'den long
nfloat
ulong
double
nint
nuint
ve 'ye açık dönüştürmeler kullanmanız gerekir.
CoreGraphics Türleri
CoreGraphics ile kullanılan nokta, boyut ve dikdörtgen veri türleri, üzerinde çalıştıkları cihaza bağlı olarak 32 veya 64 bit kullanır. başlangıçta iOS ve Mac API'lerini bağladığımızda, konak platformunun boyutlarıyla eşleşen mevcut veri yapılarını kullandık (içindeki System.Drawing
veri türleri).
Birleştirilmiş'e geçerken, örneklerini System.Drawing
aşağıdaki tabloda gösterildiği gibi karşılıklarıyla CoreGraphics
değiştirmeniz gerekir:
System.Drawing'te Eski Tür | Yeni Veri Türü CoreGraphics | Açıklama |
---|---|---|
RectangleF |
CGRect |
Kayan nokta dikdörtgen bilgilerini tutar. |
SizeF |
CGSize |
Kayan nokta boyutu bilgilerini (genişlik, yükseklik) tutar |
PointF |
CGPoint |
Kayan nokta, nokta bilgilerini (X, Y) tutar |
Kullanılan eski veri türleri, veri yapılarının öğelerini depolamak için kayarken, yenisi kullanır System.nfloat
.