我有一个名为 SPPanelManager 的类,它具有另一个名为 SPPanelSettingsManager 的类的属性。 SPPanelManager 在它的 -init 方法中有以下内容:

self.settingsManager = [[SPPanelSettingsManager alloc] init];
SPPanelManager 的目的是子类化,子类在我的整个应用程序中使用。例如,有 SPGreetingManager 。在 SPGreetingManager 的 .h 文件中,我声明:
@property (nonatomic, strong) SPGreetingSettingsManager *settingsManager;

这使得 settingsManager 属于正确的类。问题是在初始化 SPGreetingManager 子类时,它会调用上面的 init 方法,并将 settingsManager 初始化为 SPPanelSettingsManager 类,而不是 SPGreetingSettingsManager

如何让它将其初始化为该属性的正确类,而不必在每个子类中重新编写 init 代码?

最佳答案

父类(super class)( SPPanelManager )必须知 Prop 体面板管理器想要使用哪个类作为 settingsManager

Apple 使用以下方法将 CALayer 与 UIViews 匹配:

基类声明了一个返回具体 SPPanelSettingsManager 子类的类方法:

// in SPPanelManager.h
+ (Class)settingsManagerClass;

...哪些子类覆盖以返回其自定义类:
// in SPGreetingManager.m
+ (Class)settingsManagerClass
{
    return [SPGreetingSettingsManager class];
}

现在父类(super class)可以实例化设置管理器,如下所示:
self.settingsManager = [[[[self class] settingsManagerClass] alloc] init];

关于ios - 如何让子类将属性初始化为其正确的类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18257646/

10-12 00:18
查看更多