ios - Objective-C - 动态单例初始化程序?

标签 ios objective-c inheritance

我有一个 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/

相关文章:

c++ - 在 C++ 中将派生类类型的 vector 链接到父类类型的 vector

在谷歌地图上加载标记的自定义信息窗口时,iOS 应用程序卡住

ios - int plus plus 和 int plus equals 之间的差值等于 1

使用 iOS 混合模式的 Android 图像和颜色混合

ios - 在 iOS swift 中查询使用我的应用程序的用户(解析)

iOS - UITableViewCell,高亮时设置 subview 背景图片

objective-c - 有没有办法从另一个自定义构建的应用程序或脚本监视和控制 macOS 应用程序?

objective-c - Objective C 中作为 NSData 的 writeValue 数据与 Swift 中的数据之间的区别

java - 派生自具有注解 @PostConstruct 的类

javascript - 在Javascript中, 'Object.create'和 'new'的区别