搜尋

首頁  >  問答  >  主體

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 天前817

全部回覆(3)我來回復

  • 怪我咯

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

    static 修飾的局部變量,他在編譯的時候,就初始化了記憶體。只是初始化一次,而且在程式中只有一份內存,直到程式結束才會被銷毀。他被儲存到靜態儲存區。你可以打個斷點試一下,無論是once 還是defaultManager應該都是不會執行的,他在編譯的時候,就初始化了記憶體。

    回覆
    0
  • 天蓬老师

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

    被static 修飾的變數只會初始化一次,所以第二次不會置nil.

    回覆
    0
  • 大家讲道理

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

    同意樓上說的。注意static修飾符。

    回覆
    0
  • 取消回覆