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

これは、実際には ARC や iOS ではなく C のものです。これは「内部静的変数」(別名ローカル静的変数) であり、その宣言は一度だけ処理されます。関数にローカルなスコープがありますが、有効期間は延長されます。

于 2012-05-14T13:40:58.980 に答える