たとえば、内部にいくつかのデータを含むシングルトンを作成したいとします。シングルトンで予想されるように、データは一度だけ動的に割り当てられます。
しかし、このデータがいつ、どのように公開されるかについては、今すぐ知りたいと思います。シングルトンを破壊する特別な方法を確立する必要がありますか? より具体的には、このシングルトンの「dealloc」メソッドが実行されるのはいつですか? 誰がその責任を負っていますか?
たとえば、内部にいくつかのデータを含むシングルトンを作成したいとします。シングルトンで予想されるように、データは一度だけ動的に割り当てられます。
しかし、このデータがいつ、どのように公開されるかについては、今すぐ知りたいと思います。シングルトンを破壊する特別な方法を確立する必要がありますか? より具体的には、このシングルトンの「dealloc」メソッドが実行されるのはいつですか? 誰がその責任を負っていますか?
一般に、シングルトンは通常のオブジェクトと変わりません。それへの(強い)参照がなくなった場合、それは解放されます。通常、静的変数だけでオブジェクトが 1 つであることを制御します。この変数はコンパイル時に作成されます。したがって、解放することはできません。しかし、すべての「実際の」オブジェクトは可能です。
明示的に呼び出すメソッド/関数を宣言できます。
最も簡単な方法は、静的 C++ クラスにそれを保持させ、デストラクタで解放することです。複数のシングルトンがある場合、破棄順序は実装定義であるため、このアプローチはうまく拡張できません。
別の代替 (およびより良い設計) は、シングルトン アプローチを回避し、アプリの期間中存続する別のクラスの通常のインスタンスとして使用することです (アプリ デリゲートは一般的に知られている例です)。
「いつ」に関しては、その依存関係と使用方法によって異なります。破壊における外部の影響を最小限に抑えることも良いことです。