Flutter 中的 ChangeNotifiers 和 ValueNotifiers 中我们可以省略 dispose() 吗?

问题描述 投票:0回答:1

在 Flutter 和 Dart 中,如果我混合使用

ChangeNotifier
,或者使用
ValueNotifier<T>
,例如 (
_counter = ValueNotifier<int>(0)
),我应该总是
dispose()
吗?据我所知,它有一个
dispose()
成员,可以清除听众列表。但在我在网上发现的大多数示例中,
dispose()
并未被使用。我认为在大多数(所有?)实际情况下,例如,当使用
ListenableBuilder
时,监听器会自行清理,即在
dispose()
期间删除监听器(这应该是
ListenableBuilder
的情况) ,除非我弄错了?),所以不需要为通知者实现/调用
dispose()

我很难起草这样的场景:省略

dispose()
(在通知程序部分,即在扩展/混合
ChangeNotifier
或定义/公开
ValueNotifier<T>
对象的类中)会造成内存泄漏或任何其他问题。您能否帮我澄清我的想法是否正确,换句话说 - 我可以安全地忽略
dispose()
ing 通知程序吗?

澄清一下 - 我知道如果某些东西是一次性的,那么最终

dispose()
默认情况下是有意义的。但在这种特殊情况下,我认为“悬空侦听器”应该不是问题,如果客户端没有滥用该机制。也就是说,所有客户端在不再需要通知时都应该取消订阅,并且如果通知程序在此发生之前超出范围(= 已释放),则无论如何这都表明客户端逻辑存在问题,不是吗?换句话说,如果不处理通知程序会导致内存泄漏,那首先是因为客户端有问题,不是吗?

flutter dart dispose
1个回答
0
投票
如果处置增加了太多复杂性,例如额外的类或有状态的小部件,您可以跳过它。无论如何,大多数国家都是懒惰的或全球化的。但是,如果您已经在使用具有作用域或有状态小部件的提供程序,则最好进行处理。它确保通知程序不会被监听,并且 Flutter 会将其从内存中清除。

ValueNotifiers 在处置时会删除特定的内存分配。 Flutter 也有垃圾收集器!因此,如果保存您的值通知程序的类被销毁,Flutter 最终会为您处理它。与流订阅不同,侦听器也只是轻量级回调。

所以,是的,对于您提到的可预测的情况,您可以安全地忽略它们。但对于大型项目来说,依赖它是不可扩展/可测试的。

© www.soinside.com 2019 - 2024. All rights reserved.