Lý do chính xác để sử dụng dispatch_once trong trình truy cập cá thể chia sẻ của một singleton trong ARC là gì?Tại sao Apple khuyên bạn nên sử dụng dispatch_once để triển khai mẫu đơn lẻ trong 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;
}
Không phải là một ý tưởng tồi để khởi tạo singleton không đồng bộ trong nền? Tôi có nghĩa là những gì sẽ xảy ra nếu tôi yêu cầu trường hợp được chia sẻ và dựa vào nó ngay lập tức, nhưng dispatch_once mất đến Giáng sinh để tạo đối tượng của tôi? Nó không trở lại ngay lập tức? Ít nhất đó dường như là toàn bộ quan điểm của Grand Central Dispatch.
Vậy tại sao họ làm điều này?
'Lưu ý: biến tĩnh và toàn cầu mặc định là 0. – ikkentim