调用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/