我是Dart和Flutter的新手。在阅读教程时,我知道可以使用factory关键字使单例。但是之后,我得到了这段代码。
class AccountService {
static final _instance = AccountService._internal();
AccountService._internal();
static AccountService getInstance() {
return _instance;
}
}
我的问题。
getInstance()
被叫到时?AccountService._internal()
是构造函数吗?static final _instance = AccountService._internal();
-什么时候被叫?请帮助我
Dart中的静态字段都是惰性计算的,因此,第一次访问该字段时,它们将首先获得其值。
所以:
当您调用getInstance()
时,它将返回字段_instance
的值。如果这是第一次,则将评估该字段,因此将调用AccountService._internal()
。如果是第二次,则将重用先前访问的值。
您是第一次在代码中的某个地方调用该方法吗?如果您从不调用该方法,则将永远不会创建_instance
引用的对象。
是的,它是一个命名的构造函数,并且由于名称以“ _”开头,因此只能从该类所属的库中使用。这样,可以限制此类中的新对象,以便仅允许该类本身创建实例。
这是首次访问_instance
。由于该名称也以“ _”开头,因此只能从该类所属的库中使用。
Dart规范中使用以下理由描述了静态字段的惰性初始化:
带有初始化表达式的静态变量声明被初始化(8.1)。
之所以提供惰性语义,是因为我们不希望使用一种语言来定义昂贵的初始化计算,从而导致应用程序启动时间较长。这对于必须支持客户端应用程序编码的Dart尤其重要。
https://dart.dev/guides/language/specifications/DartLangSpec-v2.2.pdf