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 том, что он имеет дополнительные типы для рассмотрения.