Обработчики событий мешают сборке "мусора" произойти?

178
задан Cœur 9 April 2017 в 08:02
поделиться

3 ответа

Для конкретного вопроса "Будет pClass быть собранным "мусор"": подписка события не имеет никакого эффекта на набор pClass (как издатель).

Для GC в целом (в частности, цель): это зависит, статичен ли MyFunction или основан на экземпляре.

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

Примечание, что это односторонне; т.е. если мы имеем:

publisher.SomeEvent += target.SomeHandler;

тогда "издатель" сохранит "цель" живой, но "целевой" не сохранит "издателя" живым.

Так нет: если pClass будет собранным так или иначе, нет никакой потребности отказаться от подписки слушатели. Однако, если бы pClass был долговечен (дольше, чем экземпляр с MyFunction), то pClass мог поддержать тот экземпляр, таким образом, это будет быть необходимым отказаться от подписки, если Вы захотите, чтобы цель была собрана.

события Static, однако, поэтому, очень опасны, когда используется с основанными на экземпляре обработчиками.

199
ответ дан Marc Gravell 23 November 2019 в 20:16
поделиться

Да, pClass будет собран "мусор". Подписка события не подразумевает, что любая ссылка существует к pClass.

так не, Вы не должны будете отсоединять обработчик для pClass, который будет собран "мусор".

8
ответ дан Tor Haugen 23 November 2019 в 20:16
поделиться

Момент на часть памяти больше не ссылаются, это становится кандидатом на сборку "мусора". Когда экземпляр Вашего класса выходит из объема, на это больше не ссылается Ваша программа. Это больше не используется и поэтому может быть безопасно собрано.

, Если Вы не уверены, будет ли что-то собрано, спрашивают себя следующий вопрос: там все еще существует ссылка на него? На обработчики событий ссылается экземпляр объекта, не наоборот.

7
ответ дан lvaneenoo 23 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: