Mic*_*atz 0 singleton design-patterns objective-c
我在ObjectiveC中编写了一个单例,并在我看过的许多站点中看到了这个实现.我真的不明白第一个原始的nil赋值.由于dispatch_once中的块(据我所知......),该方法如何返回先前分配的值(在块内)而不是nil.
+ (id)sharedManager {
static MyManager *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
Run Code Online (Sandbox Code Playgroud)
PS - 我注意到这个问题曾经在这里被问到但是没有得到解决,并且没有解释这个问题 - 为什么为单身人士的静态变量分配了一个零
该sharedMyManager = nil分配是没有必要的,因为
静态变量自动初始化为零.你可以简单地删除它.
此外,在使用之前赋予值的dispatch_once()保证sharedMyManager.
另请注意,dispatch_once()使用onceToken自动初始化为零的事实.