我试图了解为什么在重复调用 sharedInstance 时 dinpatch_once_t 和 _sharedObject 没有分别设置为 0 和 nil 的原因。在我看来,这是编码的方式,局部变量将被重新初始化,因为您可以重置静态值,对吧?我在这里不了解 ARC 或 iOS 内存管理的哪些基础知识?
+ (id)sharedInstance
{
// structure used to test whether the block has completed or not
static dispatch_once_t p = 0;
// initialize sharedObject as nil (first call only)
__strong static id _sharedObject = nil;
// executes a block object once and only once for the lifetime of an application
dispatch_once(&p, ^{
_sharedObject = [[self alloc] init];
});
// returns the same object each time
return _sharedObject;
}