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