在 Flutter 和 Dart 中,如果我混合使用
ChangeNotifier
,或者使用 ValueNotifier<T>
,例如 (_counter = ValueNotifier<int>(0)
),我应该总是 dispose()
吗?据我所知,它有一个 dispose()
成员,可以清除听众列表。但在我在网上发现的大多数示例中,dispose()
并未被使用。我认为在大多数(所有?)实际情况下,例如,当使用 ListenableBuilder
时,监听器会自行清理,即在 dispose()
期间删除监听器(这应该是 ListenableBuilder
的情况) ,除非我弄错了?),所以不需要为通知者实现/调用 dispose()
?
我很难起草这样的场景:省略
dispose()
(在通知程序部分,即在扩展/混合 ChangeNotifier
或定义/公开 ValueNotifier<T>
对象的类中)会造成内存泄漏或任何其他问题。您能否帮我澄清我的想法是否正确,换句话说 - 我可以安全地忽略 dispose()
ing 通知程序吗?
澄清一下 - 我知道如果某些东西是一次性的,那么最终
dispose()
默认情况下是有意义的。但在这种特殊情况下,我认为“悬空侦听器”应该不是问题,如果客户端没有滥用该机制。也就是说,所有客户端在不再需要通知时都应该取消订阅,并且如果通知程序在此发生之前超出范围(= 已释放),则无论如何这都表明客户端逻辑存在问题,不是吗?换句话说,如果不处理通知程序会导致内存泄漏,那首先是因为客户端有问题,不是吗?
ValueNotifiers 在处置时会删除特定的内存分配。 Flutter 也有垃圾收集器!因此,如果保存您的值通知程序的类被销毁,Flutter 最终会为您处理它。与流订阅不同,侦听器也只是轻量级回调。
所以,是的,对于您提到的可预测的情况,您可以安全地忽略它们。但对于大型项目来说,依赖它是不可扩展/可测试的。