iOS 再學多線程(二 脱盲、二)-- GCD 單例完整實現(xiàn)


GCD 單例模式
GCD 單例模式

單例模式是一種常用的軟件設計模式邑滨。
在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問钱反,從而方便對實例個數的控制并節(jié)約系統(tǒng)資源掖看。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案面哥。

簡單的說哎壳,單例是一個特殊的實例,在單例所屬的類中只存在單例這么一個實例尚卫,并且單例類似全局變量归榕,在系統(tǒng)任意地方都能訪問單例.

單例對象的特點

  • 可以被全局訪問
  • 不會被釋放
  • 創(chuàng)建過程只執(zhí)行1次

單例對象應用的場景

  • 單例對象通常應用于當一個對象需要在多個界面間進行訪問的時候。
    例如: 音視頻播放器的應用吱涉、數據庫的操作 SQLite...

創(chuàng)建視頻播放器 GCD 單例為例:

pragma mark -- GCD 單例模式完整實現(xiàn)

@implementation SDP_ViewForAVPlayerWithUrl

因為實例是全局的刹泄,因此要定義為全局變量,且需要存儲在靜態(tài)區(qū)怎爵,不釋放特石。不能存儲在棧區(qū)。靜態(tài)區(qū),防止外界訪問.

 static SDP_ViewForAVPlayerWithUrl *ViewPlayer = nil;

// .h 中聲明出單例接口
// 這里的 alloc 會調用下面的 alloc 方法

+ (instancetype)shareVideoPlayer{
    
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    ViewPlayer = [[self alloc]initWithFrame:CGRectMake(0, 0, HEIGHT, WIDTH)];
    });
    
    return ViewPlayer;
}

// 這個方法服務于 alloc ,不論外界調用多少次 alloc 叽讳,分配的空間地址都是一個
+ (instancetype)allocWithZone:(struct _NSZone *)zone{

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    ViewPlayer = [super allocWithZone:zone];
});
return ViewPlayer;
}


//避免外界實現(xiàn) copy 方法憔四,所以當調用 copy 方法時,直接返回其本身哲思。因為我們希望 ViewPlayer 作為單例,所以 V1 調用 copy 時應該,直接返回本身兰粉。記得簽訂<NSCopying>協(xié)議。

 SDP_ViewForAVPlayerWithUrl * V1 = [SDP_ViewForAVPlayerWithUrl  shareVideoPlayer]
 SDP_ViewForAVPlayerWithUrl * V2 = [V1 copy];

 方法如下:
 
- (id)copyWithZone:(NSZone *)zone{

    return ViewPlayer;
}

dispatch_once

dispatch_once 可以用來初始化一些全局的數據顶瞳,它能夠確保block代碼在app的生命周期內僅被運行一次玖姑,而且還是線程安全的,不需要額外加鎖慨菱。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末焰络,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子符喝,更是在濱河造成了極大的恐慌闪彼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畏腕,居然都是意外死亡缴川,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門描馅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把夸,“玉大人,你說我怎么就攤上這事铭污×等眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵嘹狞,是天一觀的道長谚鄙。 經常有香客問我,道長刁绒,這世上最難降的妖魔是什么闷营? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮知市,結果婚禮上傻盟,老公的妹妹穿的比我還像新娘。我一直安慰自己嫂丙,他們只是感情好娘赴,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跟啤,像睡著了一般诽表。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隅肥,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天竿奏,我揣著相機與錄音,去河邊找鬼腥放。 笑死泛啸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的秃症。 我是一名探鬼主播候址,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼种柑!你這毒婦竟也來了岗仑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聚请,失蹤者是張志新(化名)和其女友劉穎荠雕,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡舞虱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年欢际,在試婚紗的時候發(fā)現(xiàn)自己被綠了母市。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矾兜。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖患久,靈堂內的尸體忽然破棺而出椅寺,到底是詐尸還是另有隱情,我是刑警寧澤蒋失,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布返帕,位于F島的核電站,受9級特大地震影響篙挽,放射性物質發(fā)生泄漏荆萤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一铣卡、第九天 我趴在偏房一處隱蔽的房頂上張望链韭。 院中可真熱鬧,春花似錦煮落、人聲如沸敞峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旋讹。三九已至,卻和暖如春轿衔,著一層夾襖步出監(jiān)牢的瞬間沉迹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工害驹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胚股,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓裙秋,卻偏偏與公主長得像琅拌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摘刑,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • GCD 深入理解:第一部分 什么是 GCD GCD 是 libdispatch 的市場名稱进宝,而 libdispat...
    willphonez閱讀 625評論 0 2
  • 雖然 GCD 已經出現(xiàn)過一段時間了,但不是每個人都明了其主要內容枷恕。這是可以理解的党晋;并發(fā)一直很棘手,而 GCD 是基...
    隨風飄蕩的小逗逼閱讀 1,334評論 0 2
  • 本性難改 長這么大從來沒借過別人錢灾而,這應當也算是幸事一件吧。雖然沒有很富有扳剿,最起碼沒有為錢而感到無助過旁趟。用我媽的話...
    黑皮豆豆閱讀 200評論 0 0
  • 團隊建設和管理 既然大家組成了一個團隊,就要用你的領導力和影響力來管理這個團隊庇绽,說起來容易做起來難锡搜,團隊能力有時候...
    新仔走天涯閱讀 257評論 0 0