iOS-單例模式

來源:互聯網
上載者:User

標籤:www.   優缺點   imp   div   stat   全域變數   ==   建立   線程鎖   

一. 單例模式簡介
  1. 單例模式的作用
    可以保證在程式運行過程,一個類只有一個執行個體,而且該執行個體易於供外界訪問
    從而方便地控制了執行個體個數,並節約系統資源

  2. 單例模式的使用場合
    在整個應用程式中,共用一份資源(這份資源只需要建立初始化1次),一般用於工具類。例如:登陸控制器,網路資料請求,音樂播放器等一個工程需要使用多次的控制器或方法。

  3. 單例模式的優缺點
    優點:
    單例模式可以保證系統中一個類只有一個執行個體而且該執行個體易於外界訪問,從而方便對執行個體個數的控制並節約系統資源。
    如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。
    單例模式因為類控制了執行個體化過程,所以類可以更加靈活修改執行個體化過程。

    缺點:
    單例對象一旦建立,對象指標是儲存在靜態區的,單例對象在堆中分配的記憶體空間,會在應用程式終止後才會被釋放。
    單例類無法繼承,因此很難進行類的擴充。
    單例不適用於變化的對象,如果同一類型的對象總是要在不同的用例情境發生變化,單例就會引起資料的錯誤,不能儲存彼此的狀態。

注意:我們在使用單例類之前,一定要考慮好單例類是否適合和類以後的擴充性,避免盲目濫用單例

二. 單例在ARC中的實現

ARC中單例實現步驟

1 在類的內部提供一個static修飾的全域變數
2 提供一個類方法,方便外界訪問
3 重寫+allocWithZone方法,保證永遠都只為單例對象分配一次記憶體空間
4 嚴謹起見,重寫-copyWithZone方法和-MutableCopyWithZone方法

ARC中單例代碼實現

#import "Tools.h"@implementation Tools// 建立靜態對象 防止外部存取static Tools *_instance;+(instancetype)allocWithZone:(struct _NSZone *)zone{//    @synchronized (self) {//        // 為了防止多線程同時訪問對象,造成多次分配記憶體空間,所以要加上線程鎖//        if (_instance == nil) {//            _instance = [super allocWithZone:zone];//        }//        return _instance;//    }    // 也可以使用一次性代碼    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        if (_instance == nil) {            _instance = [super allocWithZone:zone];        }    });    return _instance;}// 為了使執行個體易於外界訪問 我們一般提供一個類方法// 類方法命名規範 share類名|default類名|類名+(instancetype)shareTools{    //return _instance;    // 最好用self 用Tools他的子類調用時會出現錯誤    return [[self alloc]init];}// 為了嚴謹,也要重寫copyWithZone 和 mutableCopyWithZone-(id)copyWithZone:(NSZone *)zone{    return _instance;}-(id)mutableCopyWithZone:(NSZone *)zone{    return _instance;}




轉自:http://www.jianshu.com/p/4867dc92337e

iOS-單例模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.