Singleton 單例模式 -IOS開發

來源:互聯網
上載者:User
聲明

歡迎轉載,但是請尊重作者勞動成果,轉載請保留此框內聲明,謝謝。
文章出處:http://blog.csdn.net/iukey

Singleton 單例模式,又叫單子模式,是一種常見的軟體設計模式。這種模式的特點就是應用了 Singleton 單例模式的類必須保證始終只有一個執行個體(對象)存在。許多時候系統中需要某個類只能同時存在一個對象,而且可以全域調用。

單例模式的思路是一個類能返回對象一個執行個體(永遠是同一個)和一個獲得該執行個體的方法(必須是靜態方法,通常使用 getInstance這個名稱);當我們調用這個方法時,如果類持有的執行個體不為空白,就返回這個執行個體;如果類保持的執行個體為空白,就建立該類的執行個體,並將執行個體賦予該類保持的執行個體,從而限制使用者只有通過該類提供的靜態方法來得到該類唯一的執行個體。

單例模式在多線程場合下必須小心使用。當唯一的執行個體未建立時,如果有兩個線程同時調用建立方法,那麼他們同時沒有檢測到唯一的執行個體存在,從而同時各自建立了一個執行個體,這樣就有兩個執行個體被建立出來,從而違反了單例模式中執行個體唯一的原則。解決這個問題的辦法是為標記類是否已經執行個體化的變數提供一個互斥鎖(雖然這樣會降低效率)。

下面用一個例子來說明問題:

一:為你的單例類聲明一個靜態執行個體,並且初始化它的值為nil。

二:在擷取執行個體的方法中(比如下例中的 getInstance),只有在靜態執行個體為nil的時候,產生一個你的類的執行個體,這個執行個體通常被稱為共用的執行個體。

三:重寫allocWithZone 方法,用於確定:不能夠使用其他的方法來建立我們不得執行個體,限制使用者只能通過擷取執行個體的方法得到這個類的執行個體。所以,我們在allocWithZone方法中直接返回共用的類執行個體。

四:實現基本的協議方法 copyWithZone、release、retain、retainCount 和 autorelease,用於保證單例具有一個正確的狀態。最後四種方法是喲娜與記憶體管理的代碼,並不適用於垃圾收集代碼。

@implementation TCPClientstatic TCPClient * tcpClient = nil;+(TCPClient*)getInstance{    if (tcpClient == nil) {        tcpClient = [[super allocWithZone:NULL]init];    }    return tcpClient;}+ (id)allocWithZone:(NSZone *)zone{    return [[self getInstance]retain];//返回單例}- (id)copyWithZone:(NSZone*)zone{    return self;}- (id)retain{    return self;}- (NSUInteger)retainCount{    return NSUIntegerMax;}- (oneway void)release{///oneway用在分布式對象的API,這些API可以在不同的線程,甚至是不同的程式。oneway關鍵字只用在傳回型別為void的訊息定義中, 因為oneway是非同步,其訊息預計不會立即返回。    //什麼都不做}- (id)autorelease{    return self;}@end

相關文章

聯繫我們

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