attach 抽象方法

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

将此终结器附加到 value

value 对程序不再可访问,但仍然与该终结器有关联时,该终结器的回调 可能 会以 finalizationToken 作为参数被调用。回调最多只能对每个活动附加调用一次,即尚未通过调用 Finalizer.detach 分离的附加。

detach 值仅由终结器用于识别当前附加。如果提供了非 nulldetach 值,则可以将相同的(相同的)值传递给 Finalizer.detach 以删除附加。如果没有(非 null)值提供,则无法再次删除附加。

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();
    // Calls finalizer callback when `wrapper` is no longer reachable.
    _finalizer.attach(wrapper, connection, detach: wrapper);
    return wrapper;
  }

  Database._fromConnection();

  // Some useful methods.
}

可以使用相同的终结器标记附加多个对象,并且终结器可以多次附加到同一对象,使用不同的或相同的终结器标记。

实现

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