iOS 單例模式 學習 "52個方法 第6章 45條 使用 dispath_once 來執行只需運行一次的安全執行緒代碼"

來源:互聯網
上載者:User

標籤:

百度定義:單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個執行個體.

維基百科:在軟體工程中,單例是一種用於實現單例的數學概念,即將類的執行個體化限制成僅一個對象的設計模式。

簡單理解:單例模式 是只有有一個實力對象的設計模式

這次 使用 單例 用 gcd 來建立

解釋幾個關鍵詞

dispatch_once  :這個代碼塊 在整個應用的生命週期 只執行一次, 並且安全執行緒(如果被多個線程調用,該函數會同步等待直至代碼塊完成。gcd的底層做處理保證安全執行緒)

dispatch_once_t:(參數)這個斷言 是聲明這個代碼塊是否已經建立過了

優點:

(1)dispatch_once 安全執行緒

(2)代碼簡潔

(3)高效(比@synchronized 的兩倍 "52個技巧上說的")

我的使用情境很簡單, 我想建立一個單例字典 儲存 重新整理關鍵字 利用邏輯變化條件 指定重新整理頁面

我寫的枚舉恰好用到了 "52個技巧"裡面學到的知識,因為  枚舉 不一定得是 正整數 還可以是 四個字元的(通常4個字元代表一個位元組 int 是4個位元組)

這樣 我可以定義不同頁面的枚舉 並且每個頁面有自己獨立的枚舉參數

使用:

使用的時候 直接調用 類方法裡面的執行個體方法 [AHFRefreshPageUtil shareInstance]setNeedRefreshStatus:YES type:AHFSearchRefreshTypeAll];

這樣可以保證索引值對 唯一

展示建立單例:

////  AHFRefreshPageUtil.h//  dailylife////  Created by HF on 16/5/3.////#import <Foundation/Foundation.h>@interface AHFRefreshPageUtil : NSObject+ (AHFRefreshPageUtil *)sharedInstance;@end

 

////  AHFRefreshPageUtil.m//  dailylife////  Created by HF on 16/5/3.////#import "AHFRefreshPageUtil.h"@implementation AHFRefreshPageUtil{    NSMutableDictionary *refreshDictionary;}static AHFRefreshPageUtil *refreshPageUtil;- (instancetype)init{    self = [super init];    if(self){        refreshDictionary = [NSMutableDictionary dictionary];    }    return self;}+ (AHFRefreshPageUtil *)sharedInstance{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        refreshPageUtil = [[AHFRefreshPageUtil alloc] init];    });    return refreshPageUtil;}//待添加目標執行個體方法

 

其實 這裡 這麼寫有潛在的bug  假如 使用

[[AHFRefreshPageUtil  alloc]init] 就是 普通的初始化了,不是單例用法了 所以  應該 把alloc 和 copy 都重寫 防止意外出錯,但是 我這裡就預設 這一個用法,如果 出現 alloc 用法(並沒有類似需求的情況下) 那一定是豬隊友乾的,review代碼 好好說說他 就好了 哈哈 此處 不再多餘添加代碼(如果你想寫的完美 可以嘗試重寫 alloc copy 方法 讓他們返回時候 都是 同一個執行個體"sharedInstance" 就好了)

我的一個技術網友 總結的挺好的 簡單一句話" 主要看如何?線程唯一的建立 "

iOS 單例模式 學習 "52個方法 第6章 45條 使用 dispath_once 來執行只需運行一次的安全執行緒代碼"

聯繫我們

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