อะไรคือเหตุผลที่แน่นอนสำหรับการใช้ dispatch_once ใน accessor อินสแตนซ์ที่แชร์ของ singleton ภายใต้ 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 ใช้เวลาจนถึงคริสต์มาสเพื่อสร้างวัตถุของฉัน มันไม่กลับมาทันทีใช่มั้ย อย่างน้อยก็น่าจะเป็นจุดรวมของ Grand Central Dispatch
เหตุใดพวกเขาจึงทำเช่นนี้
Note: static and global variables default to zero.