Яка точна причина використання 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;
}
Хіба не погана ідея синхронізувати сингл асинхронно на задньому плані? Я маю на увазі, що станеться, якщо я попрошу цей спільний екземпляр і негайно покластися на нього, але dispatch_once займе до Різдва, щоб створити мій об’єкт? Це не повертається відразу так? Принаймні, це, мабуть, уся суть Великої Центральної диспетчеризації.
То чому вони роблять це?
Note: static and global variables default to zero.