iOS開發筆記2:單例模式(singleton)

    每個app有且僅有一個UIApplication,相似UIApplication「 [UIApplication sharedApplication]」這種一個類有且僅有惟一實例的設計即單例模式。
安全

單例設計及要點

    一個單例類設計以下圖所示app

    其中有幾點要注意:spa

     (1)實例須要用static,防止在其餘文件中被修改;線程

     (2)鑑於開發習慣,因此類方法都是以「sharedXXX"命名,並在其中進行惟一一次實例化;設計

     (3)alloc時會調用allocWithZone方法,爲了保持單例,須要重寫該方法;3d

     (4)檢查兩次實例是否爲nil是有不一樣含義的,第一次檢查實例是否爲nil也就是常說的雙重檢查鎖,避免重複加鎖。由於當第一次實例化後,後續每次獲取實例時沒有必要進行加鎖等操做,直接返回實例便可,第二次檢查實例是否爲nil很明顯就是爲了保證明例惟一了。對象

     (5)加鎖@synchronized的意義在於保證線程安全,避免_instance爲nil時恰好多個線程同時獲取實例,因而同時產生了多個實例。經過加鎖來保證同一時刻只能有一個線程進行調用,確保單例;blog

     (6)爲了防止copy時產生新的實例,一樣對copyWithZone進行了從新,保證單例作用域

GCD方式實現單例

 GCD方式單例設計以下圖所示開發

    

static的做用

    static修飾全局變量的做用在於限制其做用域,使變量只在定義的源文件內有效。

    反之,若是咱們去掉static的修飾,就能夠在外部其餘文件進行引用並修改變量,也就破壞單例了。

    

 

MRC環境下使用單例

     若是是在MRC環境下使用單例,除了上述設計外還要進行一些重寫,使對象引用計數永遠爲1

     

相關文章
相關標籤/搜索