attach 抽象方法
将此finalizer附加到value
。
当value
不再对程序可访问,但仍然与该finalizer相关联时,该finalizer的回调可能会以finalizationToken
作为参数被调用。此回调在每个活动的附加中最多被调用一次,这些活动的附加尚未通过调用Finalizer.detach来取消。
如果提供了非null
的detach
值,可以将该对象传递给Finalizer.detach以再次移除附加。
参数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();
// 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});