子类化单例

时间:2011-09-29 07:53:24

标签: objective-c cocoa

推荐单方式子类的方法(如果有的话)是什么?例如,我想创建一个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;
}

1 个答案:

答案 0 :(得分:4)

为什么不创建一个包含AVAudioSession对象的新类,而不是对单例进行子类化。这样你就可以在初始化新类时创建它,你可以为这个新类添加属性,并将自己作为委托提供。

组合是Cocoa优于子类化的首选设计模式。