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

來源:互聯網
上載者:User

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

    每一個app有且僅有一個UIApplication,類似UIApplication“ [UIApplication sharedApplication]”這種一個類有且僅有唯一執行個體的設計即單例模式。

單例設計及要點

    一個單例類設計如所示

    其中有幾點要注意:

     (1)執行個體需要用static,防止在其他檔案中被修改;

     (2)鑒於開發習慣,所以類方法都是以“sharedXXX"命名,並在其中進行唯一一次執行個體化;

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

     (4)檢查兩次執行個體是否為nil是有不同含義的,第一次檢查執行個體是否為nil也就是常說的雙重檢查鎖,避免重複加鎖。因為當第一次執行個體化後,後續每次擷取執行個體時沒有必要進行加鎖等操作,直接返回執行個體即可,第二次檢查執行個體是否為nil很明顯就是為了保證執行個體唯一了。

     (5)加鎖@synchronized的意義在於保證安全執行緒,避免_instance為nil時剛好多個線程同時擷取執行個體,於是同時產生了多個執行個體。通過加鎖來保證同一時刻只能有一個線程進行調用,確保單例;

     (6)為了防止copy時產生新的執行個體,同樣對copyWithZone進行了重新,保證單例

GCD方式實現單例

 GCD方式單例設計如所示

    

static的作用

    static修飾全域變數的作用在於限制其範圍,使變數只在定義的源檔案內有效。

    反之,如果我們去掉static的修飾,就可以在外部其他檔案進行引用並修改變數,也就破壞單例了。

    

 

MRC環境下使用單例

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

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.