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)
创建一个指向给定 targetWeakReference
factory

属性

hashCode int
对象的哈希码。
无设置器继承
runtimeType Type
对象的运行时类型表示。
无设置器继承
target → T?
this 当前弱引用的对象,如果有的话。
无设置器

方法

noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
toString() String
此对象的字符串表示。
继承

运算符

operator ==(Object other) bool
相等运算符。
继承