簡體   English   中英

Dart 中的 Lazy Singleton 與 Singleton

[英]Lazy Singleton vs Singleton in Dart

我正在使用get_it包,你有兩個選項來注冊單身人士,懶惰和我猜是“常規”(分別是GetIt.instance.registerLazySingletonGetIt.instance.registerSingleton )這是注冊為普通單身人士的類之一:

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;
  }
}

它是如何注冊的:

// main.dart
getIt.registerSingleton<AndroidDetails>(AndroidDetails(), signalsReady: true);

我的問題是,Dart 和 get_it 包中的“普通”單身人士和懶惰單身人士有什么區別?

兩者都是Singletons 但是LazySingleton指的是一個類,它的資源在第一次使用之前不會被初始化。 它通常用於節省資源和內存。

“懶惰”是指在第一次請求時而不是在聲明時啟動資源。 關於這個概念的更多閱讀在這里: https : //en.wikipedia.org/wiki/Lazy_initialization

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM