【发布时间】:2026-02-08 10:25:02
【问题描述】:
在 ARC 下单例的共享实例访问器中使用 dispatch_once 的确切原因是什么?
+ (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.
标签: ios objective-c singleton automatic-ref-counting