0
+ (GrabClass *)grab{
static GrabClass * ngrab = nil;
if (ngrab==nil)
{
ngrab=[[GrabClass alloc]init];
}
return grab;
}
我在程序中使用了很多單身人士。如果我這樣做,但是抓取方法有可能被不同的線程同時調用。保存標準的聲明一個單身人士的方式
如何避免它?
我目前的解決辦法是要做到:
+ (GrabClass *)grab{
static GrabClass * ngrab = nil;
[Tools DoSomethingWithSynchronize:^{
if (ngrab==nil)
{
ngrab=[[GrabClass alloc]init];
}
}];
return grab;
}
凡
+(void)DoSomethingWithSynchronize:(void (^)())block
{
@synchronized (self)
{
[self singleton].lockToMakeSureThatOnlyOneThreadAccessThis=[NSThread currentThread];
[self breakIfLock]; //should not be called
block();
[self singleton].lockToMakeSureThatOnlyOneThreadAccessThis=nil;
}
}
好像矯枉過正。我不知道是否有更好的標準解決方案
可能重複的[單線程安全實例化](http://stackoverflow.com/questions/2199106/thread-safe-instantiation-of-a-singleton) – 2012-04-18 05:41:49
和幾乎ObjC單身人士的權威SO帖子:http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – 2012-04-18 05:42:34
無論如何你如何找到所有這些重複? +1 – 2012-04-18 06:25:02