+ (GrabClass *)grab{
static GrabClass * ngrab = nil;
if (ngrab==nil)
{
ngrab=[[GrabClass alloc]init];
}
return grab;
}
プログラムで多くのシングルトンを使用しました。そのようにすると、しかし、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;
}
}
やり過ぎのようです。より良い標準溶液があるのだろうか