Как стать автором
Обновить

Комментарии 11

крутая статья! все понятно новичкам нужно именно такое объяснение)

Спасибо большое! Буду писать дальше)

Спасибо за статью! Продолжай. Данная реализация BulletPool не является пулом, прелесть пула в том, что объекты создаются заранее. В твоей реализации создаются по одному при вызове метода гет. Плюс лучше заранее создать необходимое количество объектов, что не было пересоздания массива (списка) объектов при добавлении нового элемента.

Спасибо за комментарий)

Ты не совсем прав, суть ObjectPool в том, что мы не удаляем объекты при их возвращении, а сохраняет (выключаем) для дальнейшего использования.

А создавать заранее некоторое количество - это просто вопрос оптимизации. Можно создать, а можно и так оставить, если не требуется большое количество объектов за один кадр создавать. В первом случае мы просто тратим ресурсы на создание при загрузке игры и не вызываем лагов. А это актуально не всегда:)

Object pool patter как раз про набор преинициализированных объектов. Мы их не создаем в момент, когда они нужны, а берем готовые

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

Вовсе нет, это просто деталь реализации, если бы в шарпе в ArrayPool.Shared все бакеты под все размеры прединициализировались, то память бы сжиралась еще при запуске приложения.

Привет! Спасибо тебе большое за предоставленную информацию. Если не секрет какие у тебя планы на следующие статьи, мне очень понравилось то как ты преподносишь материал. Буду ждать еще.

Планирую разбирать основные моменты Unity, возможно что то более продвинутое, но чуть позже

Singleton - это мощный инструмент, который при правильном использовании может значительно упростить управление состоянием приложения

Что же в нем такого мощного?

По поводу приведённого примера реализации Singleton:

  1. Если загрузить новую сцену, в которой есть другой экземпляр GameManager, оригинальный код не уничтожит этот экземпляр

  2. // Вручную создаем новый экземпляр GameManager
    GameObject newGameManager = new GameObject("AnotherGameManager"); GameManager manager = newGameManager.AddComponent<GameManager>();
    // Это нарушает синглтон, так как теперь существует два экземпляра

  3. // Код, вызываемый из нескольких потоков одновременно
    void Start() {
    // Создаем несколько потоков, каждый из которых пытается получить доступ к экземпляру GameManager
    for (int i = 0; i < 10; i++)
    {
    new Thread(() =>
    {
    GameManager manager = GameManager.Instance;
    // Может привести к созданию нескольких экземпляров
    }).Start();
    }
    }

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории