我使用了常规模式实现了一个单例对象。我的问题是:是否可以将此对象设置回nil,以便在稍后调用[MySingleton sharedInstance]时重新初始化对象?
我已经使用了正常的模式来实现单例对象。我的问题是,能否将此对象设置为nil,这样在稍后调用[MySingleton sharedInstance]时,对象会被重新初始化?// Get the shared instance and create it if necessary.
+ (MySingleton *)sharedInstance {
static dispatch_once_t pred;
static MySingleton *shared = nil;
dispatch_once(&pred, ^{
shared = [[MySingleton alloc] init];
});
return shared;
}
// We can still have a regular init method, that will get called the first time the Singleton is used.
- (id)init
{
self = [super init];
if (self) {
// Work your initialising magic here as you normally would
}
return self;
}
我猜
MySingleton *shared = [MySingleton sharedInstance];
shared = nil;
仅将本地指针shared
设置为nil
。毕竟,shared
被声明为static
。
dispatch_once_t
是一个long
,因此你应该使用0
而不是nil
。但我想要强调的更大的问题是,“重置”调度一次谓词的概念是危险的。 - Alfonso@synchronize
,并提供一个重置方法。dispatch_once
不打算被多次执行(因此名称就是这样;-))。 - Alfonso