假設我得到如下編碼的單例類MySingleton。目標C:單例模式使用
現在是一個singleton類,就像任何其他類一樣。我可以有非原子的實例變量並保留?
我可以有:@property(非原子,保留)的NSString * instanceVar在.h文件
,並在.m文件@synthesize instanceVar?
static MySingleton* _sharedMySingleton = nil;
+(MySingleton*)sharedMySingleton
{
@synchronized([MySingleton class])
{
if (!_sharedMySingleton)
[[self alloc] init];
return _sharedMySingleton;
}
return nil;
}
+(id)alloc
{
@synchronized([MySingleton class])
{
NSAssert(_sharedMySingleton == nil, @"Attempted to allocate a second instance of a singleton.");
_sharedMySingleton = [super alloc];
return _sharedMySingleton;
}
return nil;
}
要注意,ARC將打破現有的辛格爾頓實現。他們建議從現在開始使用ARC來實現類似的功能。 –
您應該使用'dispatch_once'而不是'@ synchronized',[它的速度快20倍](http://bjhomer.blogspot.com/2011/09/synchronized-vs-dispatchonce.html)。 – Jano
如果你打算多線程,那麼你希望你的單例屬性是原子的,以避免競爭條件(以及用@synchronized指令包裝你的代碼的關鍵部分)。 – jbat100