Udostępnij za pośrednictwem


Xamarin.Mac registrar

W tym dokumencie opisano przeznaczenie platformy Xamarin.Mac registrar i jej różnych konfiguracji użycia.

Omówienie

Platforma Xamarin.Mac łączy lukę między środowiskiem uruchomieniowym zarządzanym (.NET) i środowiskiem uruchomieniowym cocoa, umożliwiając klasom zarządzanym wywoływanie niezarządzanych Objective-C klas i wywoływanie ich z powrotem w przypadku wystąpienia zdarzeń. Praca wymagana do preformowania tego "magicznego" jest obsługiwana przez registrar element i jest ogólnie ukryta przed widokiem.

Istnieją wpływ na wydajność tej rejestracji, w szczególności na czas uruchamiania aplikacji i zrozumienie, co dzieje się "pod maską", czasami może być pomocne.

Konfiguracje

registrarZasadniczo zadanie podczas uruchamiania można rozdzielić na dwie katagorie:

  • Skanuj każdą klasę zarządzaną dla tych, którzy pochodzą z obiektu NSObject, i zbierz listę elementów, które mają być widoczne dla Objective-C środowiska uruchomieniowego.
  • Zarejestruj te informacje w środowisku uruchomieniowym Objective-C .

Z biegiem czasu utworzono trzy różne registrar konfiguracje, aby uwzględnić różne przypadki użycia. Każda z nich ma inne konsekwencje kompilacji i czasu wykonywania:

  • Dynamiczny registrar — podczas uruchamiania użyj odbicia platformy .NET, aby skanować każdy załadowany typ, określić listę odpowiednich elementów i poinformować środowisko uruchomieniowe natywne. Ta opcja dodaje zero czasu do kompilacji, ale jest bardzo kosztowna do obliczeń podczas uruchamiania (do wielu sekund).
  • Statyczne registrar — podczas kompilacji oblicz zestaw elementów, które mają być zarejestrowane, i wygeneruj Objective-C kod do obsługi rejestracji. Ten kod jest wywoływany podczas uruchamiania, aby szybko zarejestrować wszystkie elementy. Dodaje znaczącą przerwę w kompilacji, ale może skrócić czas od uruchomienia aplikacji.
  • "Częściowe" statyczne — nowsze podejście "hybrydowe", które przynosi większość zalet obu tych elementów. Ponieważ eksporty z Xamarin.Mac.dll są stałe, zapisz wstępnie skompilowaną bibliotekę, aby obsłużyć rejestrację i połączyć je. Użyj odbicia, aby obsłużyć biblioteki użytkowników, ale ponieważ biblioteki użytkowników eksportują znacznie mniej typów, które powiązania platformy są często dość szybkie. Zaniedbany wpływ czasu kompilacji i zmniejsza zdecydowaną większość "kosztów" dynamicznych.

Dzisiaj częściowa statyczna jest wartością domyślną dla konfiguracji debugowania, a statyczna jest wartością domyślną dla konfiguracji wydania.

Istnieją pewne scenariusze:

  • Wtyczki ładowane po uruchomieniu z klasami pochodzącymi z obiektu NSObject
  • Dynamicznie tworzone wystąpienia klas pochodzące z obiektu NSObject

gdzie nie registrar jest w stanie wiedzieć, że musi zarejestrować jakiś typ na początku. Metoda ObjCRuntime.Runtime.RegisterAssembly jest udostępniana w celu poinformowania registrar o tym, że ma dodatkowe typy do rozważenia.