Xamarin.Mac registrar

В этом документе описывается назначение Xamarin.Mac registrar и различные конфигурации использования.

Обзор

Xamarin.Mac мостит разрыв между управляемым миром (.NET) и средой выполнения Какао, что позволяет управляемым классам вызывать неуправляемые Objective-C классы и вызывать обратно при возникновении событий. Работа, необходимая для подготовки этой "магии", обрабатывается registrar и, как правило, скрыта от просмотра.

Существуют последствия этой регистрации, в частности на время запуска приложения, и понимание немного того, что происходит "под капотом", иногда может быть полезным.

Конфигурации

registrarВ основном задание при запуске может быть разделено на две катагии:

  • Сканируйте каждый управляемый класс для тех, кто является производным от NSObject, и соберите список элементов, которые будут доступны Objective-C среде выполнения.
  • Зарегистрируйте эти сведения в Objective-C среде выполнения.

Со временем для различных вариантов использования были созданы три разных registrar конфигурации. Каждое из них имеет разные последствия во время сборки и выполнения:

  • Dynamic registrar — во время запуска используйте отражение .NET для сканирования каждого загруженного типа, определения списка соответствующих элементов и информирования о собственной среде выполнения. Этот параметр добавляет нулевое время в сборку, но очень дорого вычисляется во время запуска (до нескольких секунд).
  • Статический registrar — во время сборки вычисляет набор элементов, которые необходимо зарегистрировать и создать Objective-C код для обработки регистрации. Этот код вызывается во время запуска, чтобы быстро зарегистрировать все элементы. Добавляет значительную паузу для сборки, но может сократить значительное время с начала приложения.
  • "Частичный" статический — более новый "гибридный" подход, который приносит большую часть преимуществ обоих. Так как экспорты из Xamarin.Mac.dll являются постоянными, сохраните предварительно компилированную библиотеку для обработки их регистрации и ссылки на них. Используйте отражение для обработки пользовательских библиотек, но так как пользовательские библиотеки экспортируют гораздо меньше типов, что привязки платформы это часто довольно быстро. Небрежное влияние на время сборки и уменьшает подавляющее большинство "затрат" динамической.

Сегодня частичный статический параметр по умолчанию для конфигурации отладки, а статический — по умолчанию для конфигураций выпуска.

Существует несколько сценариев:

  • Подключаемые модули, загруженные после запуска с классами, производными от NSObject
  • Динамически созданные экземпляры классов, производные от NSObject

registrar где не удается узнать, что необходимо зарегистрировать какой-то тип при запуске. Этот ObjCRuntime.Runtime.RegisterAssembly метод предоставляется для информирования о registrar том, что он имеет дополнительные типы для рассмотрения.