Apa alasan yang tepat untuk menggunakan dispatch_once di accessor instance bersama dari singleton di bawah 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;
}
Bukankah itu ide buruk untuk membuat singleton secara asinkron di latar belakang? Maksud saya apa yang terjadi jika saya meminta instance bersama itu dan segera mengandalkannya, tetapi dispatch_once membutuhkan waktu hingga Natal untuk membuat objek saya? Itu tidak segera kembali kan? Setidaknya itu tampaknya menjadi inti dari Grand Central Dispatch.
Jadi mengapa mereka melakukan ini?
Note: static and global variables default to zero.