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)
- 创建一个指向给定
target
的 WeakReference。factory
属性
方法
-
noSuchMethod(
Invocation invocation) → dynamic - 当访问不存在的方法或属性时被调用。继承
-
toString(
) → String - 此对象的字符串表示。继承
运算符
-
operator ==(
Object other) → bool - 相等运算符。继承