+ (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;
}
}
Изглежда прекалено много. Чудя се дали има по-добро стандартно решение
Отговори:
1 за отговор № 1Можете да получите много добър пример и документация тук.
Можете просто да използвате @synchronized(self)
за синхронизиране на операциите.