attach 抽象方法
将此终结器附加到 value
。
当 value
对程序不再可访问,但仍然与该终结器有关联时,该终结器的回调 可能 会以 finalizationToken
作为参数被调用。回调最多只能对每个活动附加调用一次,即尚未通过调用 Finalizer.detach 分离的附加。
detach
值仅由终结器用于识别当前附加。如果提供了非 null
的 detach
值,则可以将相同的(相同的)值传递给 Finalizer.detach 以删除附加。如果没有(非 null
)值提供,则无法再次删除附加。
value
和 detach
参数不计入程序可访问的对象。两者都必须是作为 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});