objective-c - iOS单例创建的一点疑惑
天蓬老师
天蓬老师 2017-04-18 09:56:10
0
3
811

线程安全的单例常用写法,

+(AccountManager *)sharedManager{
        static AccountManager *defaultManager = nil;
        disptch_once_t once;
        disptch_once(&once,^{
          defaultManager = [[self alloc] init];
        });
        return defaultManager;
}

在用的过程中,有点疑惑的点是:
static AccountManager *defaultManager = nil;
这行代码是在sharedManager方法之内的,
在第二次调用sharedManager的时候defaultManager不会被置为nil吗?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(3)
刘奇

静的に変更されたローカル変数は、コンパイル中にメモリを初期化します。初期化されるのは 1 回だけで、プログラム内にメモリは 1 つだけあり、プログラムが終了するまで破壊されません。静的記憶領域に保存されます。ブレークポイントを設定して試すことができます。oncedefaultManager もコンパイル時に実行する必要はありません。

いいねを押す +0
Peter_Zhu

static によって変更された変数は 1 回だけ初期化されるため、2 回目に nil に設定されることはありません。

いいねを押す +0
大家讲道理

私は上記の内容に同意します。 static 修飾子に注目してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート