そのトピックに関する多くのスレッドにもかかわらず、どのアプローチをいつ選択するかについてはまだ不明です. 具体的な例を議論することで、最終的に「理解」できることを願っています。
注: 一般的な問題は言語固有ではありませんが、ここでの私の言語は Cocoa です。
次の目的で使用したいクラス TaskQueue があります。
- スケジュールされたタスクを追加または削除するために、コードのどこからでもアクセスできます
- スケジュールされたタスクを定期的に自動的に処理する
TaskQueue を最初に使用するときに、TaskQueue にスレッドを開始させてから、一定の間隔で起動してタスクを処理するようにします。
明らかに、少なくとも 2 つの変数が必要になります。
- タスクを格納する配列
- タスクを処理するスレッドのインスタンス
タスクのキューを 1 つと、これらのタスクを処理するスレッドを 1 つだけにしたいので、次の 2 つの選択肢があります。
TaskQueue をシングルトン クラスにします (たとえば、http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.htmlで説明されているように CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR を使用して、CWLSynthesizeSingleton を変更する必要があると思います)。 h ファイルを使用して、init 時にスレッドを開始します。)
タスクの配列とスレッド インスタンスの両方を静的にします (ここで提案されているアプローチに従います: How do I declare class-level properties in Objective-C? )
この特定のケースで、他のアプローチよりも優れているアプローチが明らかにありますか? もしそうなら、なぜですか?