我有一个 Store
基类,其中包含许多所有商店都继承的方法。每个商店都是一个单例。现在,每个商店都定义了自己的近乎相同的方法:
+ (Store *)instance {
static SubStore *store = nil;
if (!store) {
store = (SubStore *) [[super allocWithZone:nil] init];
[store setupDefaults];
}
return store;
}
有没有什么方法可以简单地将方法添加到基类并由子类继承?
最佳答案
坚持简单/愚蠢,但使用 dispatch_once。
一旦您尝试使其通用,它就会变得复杂。和 buggy 。
具有显式类命名的 sharedInstance 方法非常明显,您不太可能在项目中重复多次。
但是,如果您有一个类的多个子类,则转到标识符模型。 IE。抽象存储类上的缓存,可以通过标识符查找存储实例。
我避免使用 +initialize
或更糟的是 +load
进行此类初始化。两者都是不确定的,因为它们相对于应用中其他子系统的执行顺序可能会因看似无害的更改而变化很大。
拥有完全确定性的初始化要好得多。在您的 applicationDidFinishLaunching:
(或其他之一)中添加一个标注,明确初始化您应用中的这个特定子系统。它很容易遵循,在声明和使用中都是明确的,并且不会随着代码库的发展而以奇怪的方式改变行为。
关于ios - Objective-C - 动态单例初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578033/