非メモリリソースに関連する状態を持つオブジェクトは、通常、そのリソースで明示的に「終了」するためのメソッドを提供します。「リソースを使用中」の状態でオブジェクトの割り当て解除が試行された場合に対処するための一般的な方法はありますか?私はいくつかの異なるアプローチを見てきました:
- プログラマーが間違いを犯したことをログに記録し、それをデバッグする方法を教えます(それを行います
NSLock
) - リソースが呼び出し元によって管理されているか、割り当て解除時に放棄されているかを呼び出し元に選択させます(例
NSFileHandle
) - オブジェクトが期待される最終状態にない場合、つまりプログラマーが私のオブジェクトをそのように使用しないことを主張する場合は、例外を発生させます
- 帰りはいつも片付けてください。
GCのドキュメントでは、メモリ管理と一緒に他のリソースを管理することは悪い考えであることが確認されており、(まだ)4を実行する例が示されていますが、注意が必要です。それで、誰かが常に従うアプローチを「選んだ」のでしょうか?