Aracılığıyla paylaş


Xamarin.iOS sınırlamaları

Xamarin.iOS kullanan uygulamalar statik koda derlendiğinden, çalışma zamanında kod oluşturma gerektiren hiçbir özelliği kullanmak mümkün değildir.

Masaüstü Mono ile karşılaştırıldığında Xamarin.iOS sınırlamaları şunlardır:

Sınırlı Genel Değerler Desteği

Geleneksel Mono/.NET'in aksine, i Telefon üzerindeki kod bir JIT derleyicisi tarafından isteğe bağlı olarak derlenmek yerine önceden statik olarak derlenir.

Mono'nun Full AOT teknolojisinin genel öğelerle ilgili birkaç sınırlaması vardır; bunun nedeni derleme zamanında olası her genel örneklemenin ön sırada belirlenmemesidir. Kod her zaman Tam Zamanında derleyicisi kullanılarak çalışma zamanında derlendiğinden, bu normal .NET veya Mono çalışma zamanları için sorun değildir. Ancak bu, Xamarin.iOS gibi statik bir derleyici için bir zorluk oluşturur.

Geliştiricilerin karşılaştığı yaygın sorunlardan bazıları şunlardır:

NSObjects'in Genel Alt Sınıfları sınırlıdır

Xamarin.iOS şu anda NSObject sınıfının genel alt sınıflarını oluşturmak için sınırlı desteğe sahiptir, örneğin genel yöntemler için destek yoktur. 7.2.1 itibarıyla, aşağıdaki gibi NSObjects'in genel alt sınıflarını kullanmak mümkündür:

class Foo<T> : UIView {
    [..]
}

Not

NSObjects'in genel alt sınıfları mümkün olsa da, birkaç sınırlama vardır. Daha fazla bilgi için NSObject belgesinin Genel alt sınıflarını okuyun

Dinamik Kod Oluşturma Yok

iOS çekirdeği bir uygulamanın dinamik olarak kod oluşturmasını engellediğinden, Xamarin.iOS herhangi bir dinamik kod oluşturmayı desteklemez. Bu modüller şunlardır:

  • Sistem. Düşünceler. Yayma kullanılamıyor.
  • System.Runtime.Remoting desteği yok.
  • Türleri dinamik olarak (Type.GetType ("MyType'1") oluşturma desteği yoktur, ancak var olan türleri ararken (örneğin, Type.GetType ("System.String") düzgün çalışır.
  • Geri çağırmaların derleme zamanında çalışma zamanına kaydedilmesi gerekir.

Sistem. Düşünceler. Emit

Sistem eksikliği. Düşünceler. Yayma , çalışma zamanı kodu oluşturma işlemine bağımlı olan hiçbir kodun çalışmayacağı anlamına gelir. Buna şunlar dahildir:

  • Dinamik Dil Çalışma Zamanı.

  • Dinamik Dil Çalışma Zamanı'nın üzerinde oluşturulan tüm diller.

  • Uzaktan iletişimin TransparentProxy veya çalışma zamanının dinamik olarak kod oluşturmasına neden olabilecek başka bir şey.

    Önemli

    Düşünceler karıştırmayın. Düşünceler ile yayın. Düşünceler. Yayma, kodu dinamik olarak oluşturmakla ve bu kodun JITed ve yerel koda derlenmesiyle ilgili bir durumdur. iOS (JIT derlemesi yok) ile ilgili sınırlamalar nedeniyle bu desteklenmez.

Ancak Type.GetType ("someClass") dahil olmak üzere tüm Düşünceler ion API'si, listeleme yöntemleri, özellikleri listeleme, öznitelikleri ve değerleri getirme işlemleri düzgün çalışır.

Yerel İşlevleri çağırmak için Temsilcileri Kullanma

Yerel bir işlevi C# temsilcisi aracılığıyla çağırmak için, temsilcinin bildirimi aşağıdaki özniteliklerden biriyle donatılmalıdır:

Bu özniteliklerden birinin sağlanamaması aşağıdaki gibi bir çalışma zamanı hatasına neden olur:

System.ExecutionEngineException: Attempting to JIT compile method '(wrapper managed-to-native) YourClass/YourDelegate:wrapper_aot_native(object,intptr,intptr)' while running in aot-only mode.

Geri Çağırmaları Ters Çevir

Standart Mono'da C# temsilci örneklerini işlev işaretçisi yerine yönetilmeyen koda geçirmek mümkündür. Çalışma zamanı genellikle bu işlev işaretçilerini yönetilmeyen kodun yönetilen koda geri çağırmasına olanak tanıyan küçük bir thunk'a dönüştürür.

Mono'da bu köprüler Tam Zamanında derleyicisi tarafından uygulanır. i Telefon için gereken önceden gelen derleyiciyi kullanırken şu noktada iki önemli sınırlama vardır:

  • Tüm geri çağırma yöntemlerinizi MonoPInvokeCallbackAttribute ile işaretlemeniz gerekir
  • Yöntemlerin statik yöntemler olması gerekir, örnek yöntemleri için destek yoktur.

Uzaktan İletişim Yok

Uzaktan İletişim yığını Xamarin.iOS'ta kullanılamaz.

Çalışma Zamanı Devre Dışı Bırakılan Özellikler

Mono'nun iOS Çalışma Zamanı'nda aşağıdaki özellikler devre dışı bırakıldı:

  • Profil Oluşturucu
  • Düşünceler. Emit
  • Düşünceler. Emit.Save işlevi
  • COM bağlamaları
  • JIT altyapısı
  • Meta veri doğrulayıcı (JIT olmadığından)

.NET API Sınırlamaları

Kullanıma sunulan .NET API'si, iOS'ta her şey mevcut olmadığından tam çerçevenin bir alt kümesidir. Şu anda desteklenen derlemelerin listesi için SSS bölümüne bakın.

Özellikle, Xamarin.iOS tarafından kullanılan API profili System.Configuration içermez, bu nedenle çalışma zamanının davranışını yapılandırmak için dış XML dosyalarını kullanmak mümkün değildir.