Lol*_*olo 10 singleton static-members
尽管有关该主题的许多主题,我仍然不清楚何时选择哪种方法.我希望通过讨论一个具体的例子,我终于"明白了".
注意:我的语言是Cocoa,尽管一般问题不是语言特定的.
我有一个类TaskQueue,我想用它:
首次使用TaskQueue时,我希望TaskQueue启动一个线程,然后定期唤醒该线程来处理任务.
显然,我至少需要两个变量:
由于我只需要一个任务队列和一个线程来处理这些任务,我有两个选择:
做任务队列一个单独的类(如描述例如使用CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html,我相信我将不得不修改CWLSynthesizeSingleton. h文件在初始化时启动线程.)
让任务数组和线程实例都是静态的(遵循这里建议的方法:如何在Objective-C中声明类级属性?)
在这个特定情况下,是否有一种方法比另一种方法更好?如果是这样,为什么?
Jac*_*ack 32
主要区别是简单的事情,如:
如果您不需要其中任何一个,那么必须在代码周围访问全局功能,那么您可以使用静态方法.
我个人更喜欢使用静态方法,除非我有明确的理由使用单例实例(例如具有通用接口但具有不同的实现).
请注意,将静态方法重构为单例实例是一个非常简单的过程,因此如果您发现对后者的需求,您将轻松地重构它(然后您拥有C预处理器,单个#define就足够了).