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