Spec-Zone.ru › Dart 2

dart:core

Класс WeakReference<T extends Object>

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

Слабая ссылка на целевой объект, которая может быть очищена (вместо этого ей может быть присвоено значение 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)
фабричный
Создаёт WeakReference, указывающую на указанный объект target.

Свойства

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

Методы

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.19.6/dart-core/WeakReference-class.html

Spec-Zone.ru

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