Bagikan melalui


Xamarin.Mac registrar

Dokumen ini menjelaskan tujuan Xamarin.Mac registrar dan konfigurasi penggunaannya yang berbeda.

Gambaran Umum

Xamarin.Mac menjembatani kesenjangan antara dunia terkelola (.NET) dan runtime Kakao, memungkinkan kelas terkelola untuk memanggil kelas yang tidak dikelola Objective-C dan dipanggil kembali ketika peristiwa terjadi. Pekerjaan yang diperlukan untuk melakukan preformasi "sihir" ini ditangani oleh registrar dan, secara umum, tersembunyi dari tampilan.

Ada implikasi performa dari pendaftaran ini, khususnya pada waktu mulai aplikasi, dan memahami sedikit tentang apa yang terjadi "di bawah tenda" terkadang dapat membantu.

Konfigurasi

Pada dasarnya registrarpekerjaan saat startup dapat dipisahkan menjadi dua katagori:

  • Pindai setiap kelas terkelola untuk mereka yang berasal dari NSObject dan kumpulkan daftar item yang akan diekspos ke Objective-C runtime.
  • Daftarkan informasi ini dengan Objective-C runtime.

Seiring waktu, tiga konfigurasi berbeda registrar telah dibuat untuk mencakup kasus penggunaan yang berbeda. Masing-masing memiliki konsekuensi build dan run time yang berbeda:

  • Dinamis registrar – Selama startup, gunakan refleksi .NET untuk memindai setiap jenis yang dimuat, menentukan daftar item yang relevan, dan menginformasikan runtime asli. Opsi ini menambahkan nol waktu ke build tetapi sangat mahal untuk dihitung selama peluncuran (hingga beberapa detik).
  • Statis registrar – Selama build, komputasi kumpulan item yang akan didaftarkan dan hasilkan Objective-C kode untuk menangani pendaftaran. Kode ini dipanggil selama startup untuk mendaftarkan semua item dengan cepat. Menambahkan jeda yang signifikan untuk membangun tetapi dapat memotong sejumlah besar waktu dari awal aplikasi.
  • Statis "Parsial" - Pendekatan "hibrid" yang lebih baru yang membawa sebagian besar keuntungan dari keduanya. Karena ekspor dari Xamarin.Mac.dll konstan, simpan pustaka yang telah dikomputasi untuk menangani pendaftaran dan tautan mereka. Gunakan pantulan untuk menangani pustaka pengguna, tetapi karena pustaka pengguna mengekspor lebih sedikit jenis yang mengikat platform ini sering kali agak cepat. Dampak waktu build yang dapat diapakan dan mengurangi sebagian besar "biaya" dinamis.

Hari ini statis parsial adalah default untuk konfigurasi Debug dan Statis adalah default untuk konfigurasi Rilis.

Ada beberapa skenario:

  • Plugin dimuat setelah diluncurkan dengan kelas yang berasal dari NSObject
  • Instans kelas yang dibuat secara dinamis yang berasal dari NSObject

registrar di mana tidak dapat mengetahui bahwa ia perlu mendaftarkan beberapa jenis pada awalnya. Metode ObjCRuntime.Runtime.RegisterAssembly ini disediakan untuk menginformasikan bahwa ia memiliki jenis tambahan yang perlu dipertimbangkan registrar .