1

我试图了解为什么在重复调用 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;
}
4

1 回答 1

7

它实际上是 C 的东西,而不是 ARC 或 iOS。它是一个“内部静态变量”(又名局部静态变量),它的声明只处理一次。它具有该功能的本地范围,但使用寿命更长。

于 2012-05-14T13:40:58.980 回答