ARC altında bir singletonun paylaşılan örnek erişimcisinde dispatch_once kullanmanın tam nedeni nedir?
+ (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;
}
Singleton'u arka planda eşzamansız olarak başlatmak kötü bir fikir değil mi? Bu paylaşılan örneği talep edip hemen güvenirsem ne olur, ama dispatch_once nesnemi oluşturmak için Noel'e kadar sürer? Hemen geri dönmez değil mi? En azından Grand Central Dispatch'in bütün mesele bu gibi görünüyor.
Peki bunu neden yapıyorlar?
Note: static and global variables default to zero.