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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。