gpt4 book ai didi

ios - 如何让子类将属性初始化为正确的类?

转载 作者:可可西里 更新时间:2023-11-01 05:09:21 25 4
gpt4 key购买 nike

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

self.settingsManager = [[SPPanelSettingsManager alloc] init];

SPPanelManager 的目的是进行子类化,并且子类在我的整个应用程序中使用。例如,有 SPGreetingManager。在 SPGreetingManager 的 .h 文件中,我声明:

@property (nonatomic, strong) SPGreetingSettingsManager *settingsManager;

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

我怎样才能让它初始化为该属性的正确类,而不必在每个子类中重写初始化代码?

最佳答案

父类(super class) (SPPanelManager) 必须以某种方式知 Prop 体面板管理器想要将哪个类用作 settingsManager

Apple 使用以下方法将 CALayers 与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com