एआरसी के तहत एक सिंगलटन के साझा उदाहरण एक्सेसर में डिस्पैच_ऑन का उपयोग करने का सटीक कारण क्या है?
+ (MyClass *)sharedInstance
{
// Static local predicate must be initialized to 0
static MyClass *sharedInstance = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyClass alloc] init];
// Do any other initialisation stuff here
});
return sharedInstance;
}
क्या पृष्ठभूमि में सिंगलटन को अतुल्यकालिक रूप से इंस्टेंट करना बुरा नहीं है? मेरा मतलब है कि क्या होगा अगर मैं उस साझा उदाहरण का अनुरोध करता हूं और उस पर तुरंत भरोसा करता हूं, लेकिन डिस्पैच_ऑनस मेरी वस्तु बनाने के लिए क्रिसमस तक लेता है? यह तुरंत सही नहीं है? कम से कम यह ग्रैंड सेंट्रल डिस्पैच का पूरा बिंदु लगता है।
तो वे ऐसा क्यों कर रहे हैं?
Note: static and global variables default to zero.