attach 抽象方法

void attach(
  1. Object value,
  2. T finalizationToken,
  3. {Object? detach}
)

将此finalizer附加到value

value不再对程序可访问,但仍然与该finalizer相关联时,该finalizer的回调可能会finalizationToken作为参数被调用。此回调在每个活动的附加中最多被调用一次,这些活动的附加尚未通过调用Finalizer.detach来取消。

如果提供了非nulldetach值,可以将该对象传递给Finalizer.detach以再次移除附加。

参数valuedetach不会计入程序可访问的对象。两者都必须是作为Expando键支持的对象。它们可以是同一个对象。

示例

class Database {
  // Keeps the finalizer itself reachable, otherwise it might be disposed
  // before the finalizer callback gets a chance to run.
  static final Finalizer<DBConnection> _finalizer =
      Finalizer((connection) => connection.close());

  factory Database.connect() {
    // Wraps the connection in a nice user API,
    // *and* closes connection if the user forgets to.
    final connection = DBConnection.connect();
    final wrapper = Database._fromConnection();
    // Get finalizer callback when `wrapper` is no longer reachable.
    _finalizer.attach(wrapper, connection, detach: wrapper);
    return wrapper;
  }

  Database._fromConnection();

  // Some useful methods.
}

可以使用相同的finalization token附加多个对象,并将finalizer多次附加到同一个对象,使用不同的,或相同的,finalization token。

实现

void attach(Object value, T finalizationToken, {Object? detach});