dart:core
库中Finalizer
类的用法介绍如下。
可以附加到 Dart 对象的终结器。
终结器可以在终结器和任意数量的 Dart 值之间创建附件,方法是使用该值调用 attach 以及作为附件一部分的 finalization token
和可选的 attach key
。
当程序无法访问 Dart 值时,任何当前具有值 may
的附件的终结器都会使用附件的终结令牌调用其回调函数。
例子:
// Keep the finalizer itself reachable, otherwise might not do anything.
final Finalizer<DBConnection> _finalizer = Finalizer((connection) {
connection.close();
});
/// Access the database.
Database connect() {
// Wraps the connection in a nicer user-facing API,
// *and* closes connection if the user forgets to.
var connection = _connectToDatabase();
var wrapper = Database._fromConnection(connection, _finalizer);
// Get finalizer callback when `wrapper` is no longer reachable.
_finalizer.attach(wrapper, connection, detach: wrapper);
return wrapper;
}
class Database {
final DBConnection _connection;
final Finalizer<Connection> _finalizer;
Database._fromConnection(this._connection, this._finalizer);
// Some useful methods.
void close() {
// User requested close.
_connection.close();
// Detach from finalizer, no longer needed.
_finalizer.detach(this);
}
}
这个例子有一个需要清理的外部资源的例子。当 API 的用户不再有权访问该连接时,终结器用于清理外部连接。该示例使用与附加对象相同的对象和分离键,当每个附加对象都可以单独分离时,这是一种有用的方法。作为一个分离键并不能让一个对象保持活力。
没有承诺回调将被调用。唯一可以保证的是,如果使用特定的终结标记作为参数调用终结器的回调,那么程序将无法再访问具有该终结标记的终结器的至少一个附加值。
如果 finalzier itself
变得无法访问,则允许对其进行垃圾收集,然后不会触发任何进一步的回调。始终确保在需要时保持终结器本身可访问。
如果多个终结器附加到单个对象,或者同一个终结器多次附加到一个对象,并且程序无法访问该对象,则这些附件的任何数量(包括零)都可能触发其关联终结器的回调。不一定是全部或全部。
完成回调将作为 events
发生。它们不会在其他代码执行期间发生,也不是作为微任务,而是作为类似于计时器事件的高级事件。
终结回调不能抛出。
- 注释
-
@Since("2.17")
相关用法
- Dart Finalizer.attach用法及代码示例
- Dart Finalizer.detach用法及代码示例
- Dart Finalizable用法及代码示例
- Dart FileList.first用法及代码示例
- Dart FileList.length用法及代码示例
- Dart File用法及代码示例
- Dart FileSystemEntity用法及代码示例
- Dart FileSystemEntity.resolveSymbolicLinks用法及代码示例
- Dart File.renameSync用法及代码示例
- Dart FileSystemEntity.resolveSymbolicLinksSync用法及代码示例
- Dart FileList.elementAt用法及代码示例
- Dart FixedSizeListIterator.current用法及代码示例
- Dart File.rename用法及代码示例
- Dart FixedSizeListIterator.moveNext用法及代码示例
- Dart FileList.last用法及代码示例
- Dart Future用法及代码示例
- Dart Float32List.view用法及代码示例
- Dart Future.doWhile用法及代码示例
- Dart Future.any用法及代码示例
- Dart Future.value用法及代码示例
- Dart Float32x4List.sublist用法及代码示例
- Dart Function.apply用法及代码示例
- Dart Future.wait用法及代码示例
- Dart Future.whenComplete用法及代码示例
- Dart Future.catchError用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 Finalizer<T> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。