- Мне нужно при запуске кэшировать большое количество компонентов (и я не могу напрямую ссылаться на них в монобихе)
- Я не могу быть уверен, когда они будут запрошены (поэтому я не могу кешироватьих в Awake, потому что их можно было запросить у Awake другого монобиавора)
Моим исходным решением было использование общедоступного свойства get, с которым я больше знаком.Но сейчас я пытаюсь инициализировать Lazy (это более читабельно).
Получение компонентов как свойство
// --------------- COMPONENT AS PROPERTY --------------- //
private ComponentRequired _componentAsProperty;
private ComponentRequired _ComponentAsProperty
{
get
{
if (_componentAsProperty == null)
_componentAsProperty = GetComponentInChildren<ComponentRequired>(true);
return _componentAsProperty;
}
}
Получение компонента как Lazy
// --------------- COMPONENT AS LAZY --------------- //
private Lazy<ComponentRequired> _componentAsLazy
=> new Lazy<ComponentRequired>(GetComponentInChildren<ComponentRequired>(true));
Я также прочитал Кэшированное свойство против Lazy (что было связано с созданием экземпляров), и тот же ответ может относиться к отложенному повторному просмотру компонентов.
В отношении производительности я не нашел большой разницы на данный моментна профилировщике, но я хочу попросить убедиться в любых возможных недостатках, связанных с Unity и компонентами (особенно для мобильных платформ).