cari

Rumah  >  Soal Jawab  >  teks badan

objective-c - iOS单例创建的一点疑惑

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

+(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吗?

天蓬老师天蓬老师2767 hari yang lalu818

membalas semua(3)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 09:58:10

    Pembolehubah tempatan diubah suai statik memulakan memori semasa penyusunan. Ia hanya dimulakan sekali, dan hanya terdapat satu memori dalam program, yang tidak akan dimusnahkan sehingga akhir program. Ia disimpan di kawasan simpanan statik. Anda boleh menetapkan titik putus dan mencubanya sekali mahupun defaultManager tidak harus dilaksanakan.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:58:10

    Pembolehubah yang diubah suai oleh statik hanya akan dimulakan sekali, jadi ia tidak akan ditetapkan kepada sifar kali kedua.

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:58:10

    Saya bersetuju dengan apa yang dinyatakan di atas. Perhatikan pengubah suai statik.

    balas
    0
  • Batalbalas