Spec-Zone.ru › Dart 2

dart:core

Класс WeakReference<T extends Object>

Слабая ссылка на объект Dart.

Слабая ссылка на объект target, который может быть очищен (установлен в ссылку null) в любое время, когда нет другого способа доступа к объекту-мишени программой.

Быть объектом-мишенью слабой ссылки не препятствует сбору мусора объекта.

Нет гарантий, что слабая ссылка когда-либо будет очищена, даже если все ссылки на её объект-мишень являются слабыми ссылками.

Не все объекты поддерживаются в качестве объектов-мишеней для слабых ссылок. Конструктор WeakReference отклонит любой объект, который не поддерживается в качестве ключа Expando.

Сферы применения, такие как кэширование, могут извлечь выгоду из использования слабых ссылок. Пример:

/// [CachedComputation] caches the computation result, weakly holding
/// on to the cache.
///
/// If nothing else in the program is holding on the result, and the
/// garbage collector runs, the cache is purged, freeing the memory.
///
/// Until the cache is purged, the computation will not run again on
/// a subsequent request.
///
/// Example use:
/// ```
/// final cached = CachedComputation(
///     () => jsonDecode(someJsonSource) as Object);
/// print(cached.result); // Executes computation.
/// print(cached.result); // Most likely uses cache.
/// ```
class CachedComputation<R extends Object> {
  final R Function() computation;

  WeakReference<R>? _cache;

  CachedComputation(this.computation);

  R get result {
    final cachedResult = _cache?.target;
    if (cachedResult != null) {
      return cachedResult;
    }

    final result = computation();

    // WeakReferences do not support nulls, bools, numbers, and strings.
    if (result is! bool && result is! num && result is! String) {
      _cache = WeakReference(result);
    }

    return result;
  }
}
Аннотации
  • @Since("2.17")

Конструкторы

WeakReference(T target)
factory
Создаёт WeakReference, указывающую на данный target.

Свойства

hashCode → int
только для чтения, унаследовано
Код хэша для этого объекта.
runtimeType → Type
только для чтения, унаследовано
Представление фактического типа объекта во время выполнения.
target → T?
только для чтения
Текущий объект, на который слабо ссылается this, если таковой имеется.

Методы

noSuchMethod(Invocation invocation) → dynamic
унаследовано
Вызывается при обращении к несуществующему методу или свойству.
toString() → String
унаследовано
Строковое представление этого объекта.

Операторы

operator ==(Object other) → bool
унаследовано
Оператор равенства.

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-core/WeakReference-class.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API