@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:这样......?
答案 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;尝试过,效果很好。