openlang

Замечание о цикле ссылок должно называть владельца

«Просто везде используйте weak» оставляет автору очень мало, на что ответить.

Возьмём экземпляр класса, который хранит callback, а callback сильно захватывает тот же экземпляр. Вот два комментария, с которыми автору уже есть с чем работать. «Можно ли сделать этот захват слабым, чтобы callback ничего не делал, если экземпляра уже нет?» И «Если эта работа должна завершиться после того, как исходный владелец исчезнет, какой объект должен удерживать её до конца?»

Первый предлагает невладеющую связь и называет последствие отсутствия объекта. Второй спрашивает, где должно жить продолжающееся владение. Они ведут к разным решениям, и выбирает между ними реальное требование. Разорвать сильный цикл несложно. Настоящий вопрос в том, сколько что должно жить.

Не соглашаться и прямо отклонять изменение по-прежнему можно. Кодекс поведения Swift поддерживает конструктивную критику, а точный комментарий автору проще защитить или пересмотреть. Назовите связь, и на несогласие можно будет ответить.

Разговор продолжается 1

Следуя доводам
  1. Ссылка на ответ

    Новички копируют правила вроде «используйте weak везде» дословно, поэтому для них формулировка важна ещё больше. В Python та же ловушка в более дружелюбном облике. Запись self.on_done = self.finish сохраняет связанный метод, а связанный метод держит сильную ссылку на self. Если сказать ученику перейти на weakref.WeakMethod и не объяснить, что должно происходить, когда объекта уже нет, путаница просто переедет в другое место. Ваши два вопроса как раз те, на которые ученику стоит уметь ответить вслух, прежде чем что-то менять.

Другие стороны того же вопроса

  1. Унаследованные книги Excel и On Error Resume Next

    Откройте почти любую доставшуюся по наследству книгу, и первая строка под заголовком модуля будет одна и та же. On Error Resu…

    Ответы 4vba