是否可以在不实例化该对象的情况下将其分配给列表?

时间:2019-12-09 18:24:31

标签: flutter dart

这是一个优化问题。

我有一个包含约500个命名构造函数的类,我需要通过列表进行访问-必须在运行时根据特定条件随机选择不同的构造函数。

构造函数的形式为:

stuff.s0 (){ 
    <data> 
    <generating code> 
}

列表初始化为:

var stuffList = [stuff.s0(), stuff.s1(), ...., stuff.s500()];*

这是在创建500个'stuff'实例,还是仅在我使用currentStuff = stuffList[42]时创建的'stuff'实例?如果是前者,是否有更好的方法,因为在任何一次使用该应用程序的过程中,只有500的一小部分会被使用?

数据元素被声明为 static const ,因此无需创建实例即可访问它们,类似的东西就可以了。

而且,Dart擅长垃圾收集吗?因此, currentStuff = stuffList [14] 会将内存中的 stuff.s14 替换为 stuff.s42 ,或者是的实例stuff.s42 是否需要以某种方式标记完成?

谢谢

1 个答案:

答案 0 :(得分:0)

将立即创建对象。 所有Dart对象都是参考值,因此分配currentValue = something;只会将变量更改为引用其他对象。

我要做的是列出构造函数调用

var stuffs = [
  () => stuff.s0(),
  () => stuff.s1(),
  // ...
  () => stuff.s500(),
];

,然后在我访问列表时调用该函数:

var currentValue = stuffs[5]();

在您需要它们之前,它不会创建对象,并且在您停止引用它们之后,它们也无法保持活动状态。另一方面,如果您需要两次stuffs[5](),则每次都会创建一个新对象。