Aracılığıyla paylaş


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.Int32gibi 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.

intve uint tümü örtük olarak olarak dönüştürülebilir nintnuintnfloat ve 32 bit her zaman 32 veya 64 bit olarak sığar.float

nintve nuint örtük olarak olarak dönüştürülebilir longulongdouble 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 floatintnfloatuint ile arasında açık dönüştürmeler nintnuint kullanmanız gerekir.

yerel türler yalnızca 32 bit depolama alanı tutabileceğinden, ve 'den longnfloatulongdoublenintnuint 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.Drawingveri 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.