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.