/ / सिंगलटन घोषित करने के लिए मानक तरीका सहेजें - उद्देश्य-सी, सिंगलटन, xcode4.2

सिंगलटन घोषित करने के लिए मानक तरीका सहेजें - उद्देश्य-सी, सिंगलटन, 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) ऑपरेशन को सिंक्रनाइज़ करने के लिए।