Несмотря на множество тем в этой теме, я до сих пор неясно, когда выбирать, какой подход. Я надеюсь, что, обсудив конкретный пример, я, наконец, "получу".
Примечание. Мой язык здесь Cocoa, хотя общая проблема не зависит от языка.
У меня есть класс TaskQueue, который я хочу использовать для:
- доступ из любого места в моем коде для добавления или удаления запланированных задач
- автоматически выполняет запланированные задания с регулярными интервалами.
Когда TaskQueue впервые используется, я хочу, чтобы TaskQueue инициировал поток, который затем просыпался с регулярными интервалами для обработки задач.
Очевидно, мне понадобится минимум две переменные:
- массив для хранения задач
- экземпляр потока, обрабатывающего задачи
Поскольку для обработки этих задач требуется только одна очередь задач и один поток, у меня есть два варианта:
-
Сделайте TaskQueue одноэлементным классом (используя, например, CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR, как описано в http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html, который, я считаю, мне придется измените файл CWLSynthesizeSingleton.h, чтобы запустить поток во время init.)
-
Пусть массив задач и экземпляр потока статичны (следуя предложенному здесь подходу: Как объявить свойства уровня класса в Objective-C?)
Существует ли один подход, который лучше, чем другой в этом конкретном случае? Если да, то почему?