首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart中的惰性单例vs单例

Dart中的惰性单例vs单例
EN

Stack Overflow用户
提问于 2019-12-24 02:47:01
回答 2查看 4.6K关注 0票数 4

我正在使用get_it包,你会得到两个注册单例的选项,lazy和"regular“(分别是GetIt.instance.registerLazySingletonGetIt.instance.registerSingleton )下面是一个注册为普通单例的类:

代码语言:javascript
复制
class AndroidDetails {
  static final DeviceInfoPlugin _deviceInfoPlugin = DeviceInfoPlugin();
  Map<String, dynamic> _deviceData = {};

  AndroidDetails() {
    _init().then((_) => getIt.signalReady(this));
  }

  Future<void> _init() async {
    try {
      AndroidDeviceInfo _deviceInfo = await deviceInfoPlugin.androidInfo;
      _deviceData = _getDeviceData(_deviceInfo);
    } on PlatformException {
      _deviceData = <String, dynamic>{
        'Error:': 'Failed to get platform version.',
      };
    }
  }

  Map<String, dynamic> _getDeviceData(AndroidDeviceInfo build) {
    return <String, dynamic>{
      'version.sdkInt': build.version.sdkInt,
    };
  }

  bool canChangeStatusBarColor() {
    if (_deviceData.isNotEmpty) {
      return _deviceData['version.sdkInt'] >= 21;
    }
    return null;
  }

  bool canChangeNavbarIconColor() {
    if (_deviceData.isNotEmpty) {
      return _deviceData['version.sdkInt'] >= 27;
    }
    return null;
  }
}

它的注册方式:

代码语言:javascript
复制
// main.dart
getIt.registerSingleton<AndroidDetails>(AndroidDetails(), signalsReady: true);

我的问题是,Dart和get_it包中的“正常”单例和懒惰单例有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-24 16:17:05

两者都是Singletons。但LazySingleton指的是一个类,它的资源只有在第一次使用时才会被初始化。它通常用来节省资源和内存。

票数 9
EN

Stack Overflow用户

发布于 2019-12-24 06:44:37

“惰性”是指在第一次请求时启动资源,而不是在声明时启动资源。这里有更多关于这个概念的阅读:https://en.wikipedia.org/wiki/Lazy_initialization

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59459976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档