单例+初始化代码

时间:2014-02-23 22:54:30

标签: ios iphone ipad singleton

我有一个像所有单身人士一样初始化的单身人士,有这样的事情:

+ (MySingleton *)sharedInstance
{
  static MySingleton *sharedMyInstance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
        sharedMyInstance = [[MySingleton alloc] init];
  });
  return sharedMyInstance;

}

在我的情况下,我想添加一些代码来初始化单例,但因为sharedInstance是一个类方法,所以我不能从那里调用实例方法。

所以我总是要有这种模式:

MySingleton *sing = [MySingleton sharedInstance];
[sing initialize];

好的,我可以这样做

MySingleton *sing = [[MySingleton sharedInstance] initialize];

但是这会产生另一个问题,因为如果在这一点上初始化单例是我唯一需要的东西,那么sing就没有被使用了,这是丑陋的代码。

我想我可以做到

[[MySingleton sharedInstance] initialize];

并且Xcode不会抱怨,但这听起来不太好。

还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

检查你的代码;-)特别是这一行:

sharedMyInstance = [[MySingleton alloc] init];

您必须实现init,并且您可以在其中初始化您的单例(AKA共享实例)的实例变量。它将在第一次使用共享实例时调用。