调用StreamController.close会自动取消StreamSubscription并删除所有引用吗?
我认为这是有道理的,但我无法确定是否在文档中找到它。

我有以下代码:

dispose: (context, bloc) {
  _blocSubscription.cancel();
  bloc.dispose();
},

但是我很确定我可以删除那个_blocSubscription变量并只调用bloc.dispose(),因为_blocSubscription.cancel()似乎是多余的,并且任何订阅都会被自动取消。但是我找不到关于订阅是否包含对封闭Stream的引用的任何信息,这可能导致内存泄漏。

最佳答案

您只需要考虑 StreamSubscription 的实际作用。

它仅提供了一种方法,让您从 Stream 生成的事件中取消订阅侦听器
因此,如果由于您已关闭Stream而没有不再有其他事件了,这意味着不再是会再有其他事件了,您的听众将无法再接收任何事件。

话虽如此,关闭StreamSubscription.cancel后绝对不需要 Stream
另一方面,取消订阅没有错。如果您不能完全确定Stream已关闭,但又不想再收到任何事件,则无论如何都可以取消订阅。

请注意,取消订阅并不意味着Stream已关闭。 Stream可以让多个侦听器接收事件。

调用StreamController.close会自动取消StreamSubscription吗?

如果您考虑我上面写的内容,您将意识到这个问题有些多余,因为在关闭流时没有什么可以“取消”的,因为您再也不会收到任何事件。
所以我会用来回答。

关于flutter - StreamSubscription.cancel对StreamController.close的内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57503160/

10-09 03:23