推荐单方式子类的方法(如果有的话)是什么?例如,我想创建一个AVAudioSession
的子类,它添加了一些属性并使单例成为自己的AVAudioSessionDelegate
。
现在,我正在重写sharedInstance
来分配我自己的类,然后调用我自己的类'init
方法。我不确定其他单例方法是否需要像常规单例一样受到保护,因为超类已经是单例:
@interface PdAudioSession : AVAudioSession <AVAudioSessionDelegate>
@implementation PdAudioSession
+ (PdAudioSession *)sharedInstance {
static PdAudioSession *myInstance = nil;
@synchronized (self) {
if (!myInstance) {
myInstance = [[PdAudioSession alloc] init];
}
}
return myInstance;
}
- (id)init {
self = [super init];
if (self) {
self.delegate = self;
}
return self;
}
答案 0 :(得分:4)
为什么不创建一个包含AVAudioSession
对象的新类,而不是对单例进行子类化。这样你就可以在初始化新类时创建它,你可以为这个新类添加属性,并将自己作为委托提供。
组合是Cocoa优于子类化的首选设计模式。