Класс 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