在 Flutter 中 ElevatedButton 的 onPressed 或 setState 中实例化对象是不好的做法吗?

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

最初,我在类中实例化了

date01
对象,但有时尽管输入发生了变化,结果仍然保留。为了解决这个问题,我将类
AjtDateUtils
的对象实例化移动到
onPressed
或更准确地说移动到
setState
,如下所示:

onPressed: () {
  setState(() {
    AjtDateUtils date01 = AjtDateUtils();
    result =
        date01.function_call(firstController.text);
  });
},
child: const Text('Compute'))

现在,我很好奇这是好还是坏。这是否会导致每次按下按钮时都会增加内存使用量,或者这将由语言正确处理(在每次下一个实例化之前销毁)?或者,我是否必须实现更多代码来处理我不知道的事情?

flutter dart object instantiation
1个回答
0
投票

辅助功能

毫无疑问,最好通过整个类来访问对象,成为类成员而不仅仅是局部变量。可以根据用例和 该对象的使用位置来做出选择。

内存分配

Dart 是一种基于垃圾收集的编程语言,一旦对象被释放(该对象不再被引用),它将被破坏,例如:从内存中删除。这是操作系统管理其内存的责任。

注意:Dart 没有析构函数。

现在,你的问题是,是否必须将该对象用作局部变量,但你关心内存:

没关系。尝试在使用完该对象后清除对该对象的引用,这样它就变成了垃圾。

您可以通过将对象的引用变量设置为 null 来取消引用对象

date01 = null
result = null

注意:dart 是一种空安全和声音空安全语言。 所以 dart 分析器可能不接受空值。

如果是这样,你可以将一个dispose方法作为想要成为垃圾的对象的成员方法。

并且该 dispose 方法应终止该对象的操作(关闭连接、关闭文件等)并尝试将类属性设置为 null 或虚拟值。

void dispose()
{

// terminate ops
//free the attributes

}

希望对您有帮助。

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