Какова точная причина для использования dispatch_once в средстве доступа к экземпляру единого экземпляра в ARC?
+ (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 асинхронно в фоновом режиме? Я имею в виду, что произойдет, если я запрашиваю этот общий экземпляр и сразу полагаюсь на него, но dispatch_once занимает до Рождества, чтобы создать мой объект? Не сразу возвращается, верно? По крайней мере, в этом и заключается весь смысл Grand Central Dispatch.
Так почему они это делают?
Note: static and global variables default to zero.