Xamarin.Mac registrar

Tento dokument popisuje účel Xamarin.Mac registrar a jeho různé konfigurace použití.

Přehled

Xamarin.Mac přemostije mezeru mezi spravovaným světem (.NET) a modulem runtime Cocoa, což umožňuje spravovaným třídám volat nespravované Objective-C třídy a volat zpět při výskytu událostí. Práce potřebná k předběžnému vytvoření tohoto "magie" je zpracována registrar a je obecně skryta ze zobrazení.

Tato registrace má vliv na výkon, konkrétně na čas spuštění aplikace a pochopení toho, co se děje "pod kapotou", může být někdy užitečné.

Konfigurace

registrarV zásadě je možné úlohu při spuštění rozdělit do dvou kategorií:

  • Prohledejte všechny spravované třídy pro ty, kteří pocházejí z objektu NSObject, a shromážděte seznam položek, které mají být vystaveny modulu Objective-C runtime.
  • Zaregistrujte tyto informace v modulu Objective-C runtime.

V průběhu času byly vytvořeny tři různé registrar konfigurace pro různé případy použití. Každý z nich má jiné důsledky sestavení a doby běhu:

  • Dynamická registrar – Během spouštění můžete pomocí reflexe .NET prohledat každý načtený typ, určit seznam relevantních položek a informovat nativní modul runtime. Tato možnost přidává do sestavení nulový čas, ale při spuštění je velmi náročná na výpočetní výkon (až několik sekund).
  • Static registrar – Během sestavování vypočítá sadu položek, které se mají zaregistrovat, a vygenerujte Objective-C kód pro zpracování registrace. Tento kód se vyvolá při spuštění, aby se rychle zaregistrovaly všechny položky. Přidá významné pozastavení sestavení, ale může zkrátit značné množství času od spuštění aplikace.
  • "Částečná" statická – novější "hybridní" přístup, který přináší většinu výhod obou. Vzhledem k tomu, že exporty z Xamarin.Mac.dll jsou konstantní, uložte předem výpočetní knihovnu pro zpracování registrace a propojení s nimi. Reflexe slouží ke zpracování uživatelských knihoven, ale protože uživatelské knihovny exportují mnohem méně typů, než jsou vazby platformy často poměrně rychlé. Zanedbávatelný dopad na čas sestavení a snižuje velkou většinu "nákladů" dynamického prostředí.

Dnes je částečná statická výchozí hodnota pro konfiguraci ladění a Static je výchozí pro konfigurace vydané verze.

Existují některé scénáře:

  • Moduly plug-in načtené po spuštění s třídami odvozenými z objektu NSObject
  • Dynamicky vytvořené instance třídy odvozené z objektu NSObject

registrar kde není schopen vědět, že musí zaregistrovat určitý typ na začátku. Metoda ObjCRuntime.Runtime.RegisterAssembly je poskytována, aby informovala registrar , že má další typy, které je potřeba zvážit.