这种单身模式有意义吗?

时间:2010-06-17 09:20:14

标签: objective-c

@implementation MySingletonClass
static MySingletonClass *sharedInstance = nil;


+ (MySingletonClass*)sharedInstance {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[self alloc] init];
        }
    }
    return sharedInstance;
}

+ (id)alloc {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [super alloc];
            return sharedInstance; 
        }
    }
    return nil; 
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [super allocWithZone:zone];
            return sharedInstance; 
        }
    }
    return nil; 
}

-(id)init {
    self = [super init];
    if (self != nil) {
        // initialize stuff here
    }

    return self;
}

@end

不确定是否可以覆盖alloc和allocWithZone:这样......?

3 个答案:

答案 0 :(得分:2)

看看这个Singleton模板。我已经习惯了(曾经,哈哈!开玩笑)并且效果很好。

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

答案 1 :(得分:1)

您不需要覆盖alloc,因为默认实现调用allocWithZone:

除此之外,您可能需要覆盖其他一些方法。有关详细信息,请参阅Apple docs

答案 2 :(得分:0)

我在许多项目中也使用了cocoawithlove模板;维基百科的answer也很好。与往常一样,请记住Apple的documentation是如何使用单例类构建其框架和应用程序的良好指南。

刚刚找到这个implementation on github;尝试过,效果很好。