Xamarin.Mac registrar
Bu belgede Xamarin.Mac'in registrar amacı ve farklı kullanım yapılandırmaları açıklanmaktadır.
Genel bakış
Xamarin.Mac, yönetilen (.NET) dünya ve Cocoa'nın çalışma zamanı arasındaki boşluğu kapatarak yönetilen sınıfların yönetilmeyen Objective-C sınıfları çağırmasına ve olaylar gerçekleştiğinde geri çağrılmasına olanak tanır. Bu "sihri" önceden oluşturmak için gereken iş ve tarafından registrar işlenir ve genel olarak görünümden gizlenir.
Bu kaydın, özellikle de uygulamanın başlangıç zamanında performans üzerindeki etkileri vardır ve "arka planda" olup bitenlerin birazını anlamak bazen yararlı olabilir.
Yapılandırmalar
Başlangıçtaki registrarişi temelde iki katagoriye ayrılabilir:
- NSObject'ten türetilen her yönetilen sınıfı tarayın ve çalışma zamanına Objective-C sunulacak öğelerin listesini toplayın.
- Bu bilgileri çalışma zamanına Objective-C kaydedin.
Zaman içinde, farklı registrar kullanım örneklerini kapsayacak şekilde üç farklı yapılandırma oluşturulmuştur. Her birinin farklı derleme ve çalışma süresi sonuçları vardır:
- Dinamik registrar – Başlangıç sırasında yüklenen her türü taramak, ilgili öğelerin listesini belirlemek ve yerel çalışma zamanını bilgilendirmek için .NET yansımasını kullanın. Bu seçenek derlemeye sıfır zaman ekler, ancak başlatma sırasında işlem yapmak çok pahalıdır (birden çok saniyeye kadar).
- Statik registrar – Derleme sırasında kaydedilecek öğe kümesini hesaplayın ve kaydı işlemek için kod oluşturun Objective-C . Bu kod, tüm öğeleri hızla kaydetmek için başlatma sırasında çağrılır. Derlemeye önemli bir duraklama ekler, ancak uygulama başlangıcından itibaren önemli miktarda zaman kısaltabilir.
- "Kısmi" statik – Her ikisinin de avantajlarının çoğunu getiren daha yeni bir "hibrit" yaklaşım. Xamarin.Mac.dll dışarı aktarma işlemleri sabit olduğundan, kaydını işlemek ve bunu bağlamak için önceden derlenmiş bir kitaplığı kaydedin. Kullanıcı kitaplıklarını işlemek için yansımayı kullanın, ancak kullanıcı kitaplıkları platform tarafından bağlanan çok daha az türü dışarı aktardıkça bu genellikle oldukça hızlıdır. İhmal edilebilir bir derleme süresi etkisi ve dinamik "maliyetin" büyük çoğunluğunu azaltır.
Bugün hata ayıklama yapılandırması için kısmi statik varsayılandır ve Yayın yapılandırmaları için varsayılan statiktir.
Bazı senaryolar vardır:
- Başlatmadan sonra yüklenen eklentiler, NSObject'ten türetilen sınıflarla
- NSObject'ten türetilen dinamik olarak oluşturulan sınıf örnekleri
burada , registrar başlangıçta bir tür kaydetmesi gerektiğini bilemez. yöntemi ObjCRuntime.Runtime.RegisterAssembly
, dikkate alınması gereken ek türler olduğunu bildirmek registrar için sağlanır.