/ / Запазване на стандартен начин за деклариране на сингъл - обектив-c, единичен, xcode4.2

Запазване на стандартния начин за деклариране на singleton - objective-c, singleton, xcode4.2

+ (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) за синхронизиране на операциите.