【发布时间】:2013-10-29 13:54:00
【问题描述】:
我创建了一个单例类,这里是代码
static DPGameManager *sharedManager = nil;
+ (DPGameManager *)sharedManager
{
static dispatch_once_t singletonPredicate;
dispatch_once (&_singletonPredicate, ^(){
sharedManager = [[DPGameManager alloc]init];
});
return sharedManager;
}
DPGameManager *m1 = [DPGameManager sharedManager];
DPGameManager *m2 = [DPGameManager alloc]init];
DPGameManager *m3 = [DPGameManager alloc]init];
m1、m2、m3 是三个不同的对象。
但是我们应该不能为一个单例类创建三个不同的对象。
我们怎样才能做到这一点。?
或者这是否可以为 Singleton 类创建不同的对象。
【问题讨论】:
-
在单例模式的良好实现中,init 不会创建 3 个不同的实例,但应该给您相同的实例,只在第一次创建一个新实例。您需要实现自己的 init 方法(以及所有其他 init 方法)以确保该类只有一个实例
-
@MarcoPace 谢谢...我得到了我的一个问题的答案,即单身人士应该创建一个且只有一个对象。但是,您能否提供一些代码,在单例类的情况下实现自己的 init 方法。
-
@RajanKumarTiwari 我发现 Mugunth Kumar 的 this singleton template 在很多时候都很有用。
-
您不必显式分配单例:
+ (DPGameManager *)sharedManager在第一次调用时就这样做了。您可以(并且可能应该 - 为了避免混淆)始终将 is 称为[DPGameManager sharedManager],您就可以开始了。
标签: ios objective-c singleton