gpt4 book ai didi

memory-leaks - Dart/Flutter 有弱引用的概念吗?

转载 作者:IT老高 更新时间:2023-10-28 12:41:16 49 4
gpt4 key购买 nike

我正处于学习的早期阶段 Dart & Flutter .我正在研究如何实现 eventbus ,它工作正常,但我注意到小部件(和/或其关联状态)持有对(全局)事件总线的强引用,导致内存泄漏。解决方案是在小部件状态的 dispose 方法中取消订阅,但我想知道是否有更好的方法(我来自 Swift,它允许将变量声明为“弱”)。

编辑

我最终将状态子类化如下...有更好的建议吗?

abstract class CustomState<T extends StatefulWidget> extends State {

List<StreamSubscription> eventSubscriptions = [];

void subscribeToEvent(Object eventClass, Function callback) {
StreamSubscription subscription = eventBus.on(eventClass).listen(callback);
eventSubscriptions.add(subscription);
}

void dispose() {
super.dispose();
eventSubscriptions.forEach((subscription) => subscription.cancel());
eventSubscriptions = null;
}
}

class MyEvent {
String text;
MyEvent(this.text);
}

class _MyHomePageState extends CustomState<MyHomePage> {

@override
void initState() {
super.initState();
subscribeToEvent(MyEvent, onEventFired);
}

void onEventFired(event) {
print('event fired: ${event.runtimeType} ${event.text}');
}
}

最佳答案

Dart 不提供弱引用功能。

虽然 Expando 具有弱引用行为。不确定这是否适用于您的用例。

我有时会使用一个 Mixin,它提供一个列表,我可以在其中添加订阅和一个 dispose 方法,它取消所有订阅并将其添加到我需要的小部件和其他类中。

关于memory-leaks - Dart/Flutter 有弱引用的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831543/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com