国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS設計模式之單例模式

2019-11-14 18:34:34
字體:
來源:轉載
供稿:網友

單例模式

基礎理解

  • 所有類都有構造方法,不編碼則系統默認生成空的構造方法,若有顯示定義的構造方法,默認的構造方法就會失效。
  • 單例模式(Singleton):保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
    *通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化多個對象。一個最好的辦法就是:讓類自身負責保存它的唯一實例。這個類可以保證沒有其他實例可以被創建,并且它可以提供一個訪問該實例的方法。
  • 單例模式的意圖是使得類的一個對象成為系統中的唯一實例。

好處

  • 單例模式可以保證唯一的實例。
  • 單例模式因為類本身封裝了它的唯一實例,這樣它可以嚴格地控制客戶怎么樣訪問他以及何時訪問他。簡單來說就是對唯一實例的受控訪問。

多線程中的單例

  • 在多線程程序中,多個線程同時,值得注意的是同時訪問單例的構造方法,會有可能造成創建多個實例的。所以我們需要把進程加一把鎖來處理。lock 是確保當一個線程位于代碼的臨界區時,另一個線程不進去臨界區。如果其他線程試圖進入鎖定的代碼,則它將一直等待,知道該對象被釋放。
  • 雙重鎖定
    我們不用讓線程每次都加鎖,而只是在實例未被創建的時候再加鎖處理。同時也能保證多線程的安全。這種做法被稱為Double-Check Locking(雙重鎖定)。
  • 餓漢式單例類:靜態初始化的方式是在自己被加載時就將自己實例化。
  • 懶漢式單例類:要在第一次被引用時,才會將自己實例化。
  • 懶漢式和餓漢式比較
    由于類一加載就實例化對象,所以要提前占用系統資源。而懶漢式又會面臨著多線程訪問的安全性問題,需要做雙重鎖定這樣的處理才能保證安全。從C#語言的角度來講,餓漢式單例類已經滿足我們的需求了。

使用單例的情況

  • 類中只能有一個實例,而且必須從一個為人熟知的訪問點對其進行訪問。
  • 這個唯一的實例只能夠通過子類化進行擴展,而且擴展的對象不會破壞客戶端代碼。

在Cocoa Touch中使用單例模式

  • 使用UIapplication類。這是框架中最為常用的一個單例類,他提供了一個控制并協調iOS應用程序的集中點。
  • 使用UIAccelerometer類。該類讓應用程序可以進行注冊,以接收來自iOS設備內置的加速計的加速度相關數據。應用程序會收到三維空間中沿主軸的線性加速度變化,可以使用這一數據監測設備的當前方向和當前方向的瞬間變化。
  • 使用NSFileManager類。

例子

Singleton.h

////  Singleton.h//  SingletonDemo////  Created by zhanggui on 15/8/6.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import <Foundation/Foundation.h>@interface Singleton : NSObject+(instancetype)sharedInstance;@end

Singleton.m

////  Singleton.m//  SingletonDemo////  Created by zhanggui on 15/8/6.//  Copyright (c) 2015年 zhanggui. All rights reserved.//#import "Singleton.h"@implementation Singleton+(instancetype)sharedInstance {    static Singleton *sharedInstance = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        sharedInstance = [[self alloc] init];    });    return sharedInstance;}@end

上面這種方式是最安全也是最有效的創建單例的方式。不可能去創建兩個實例,而且使100%的線程安全。

總結

  • 幾乎在任何的應用程序中,單例模式都極為常用,并不只限于iOS應用程序開發。
  • 只要應用程序需要用集中式的類來協助其服務,這個類就應生成單一的實例,而不是多個實例。

附:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄浪县| 育儿| 双桥区| 新兴县| 揭东县| 东丰县| 盐亭县| 民勤县| 长泰县| 南木林县| 双桥区| 图木舒克市| 华阴市| 大方县| 渝北区| 张家口市| 凤冈县| 德保县| 华池县| 壶关县| 岑巩县| 海宁市| 阿拉善左旗| 合肥市| 咸阳市| 贵南县| 呈贡县| 乌鲁木齐县| 玉环县| 报价| 民乐县| 安福县| 洛阳市| 东阳市| 呼和浩特市| 于都县| 樟树市| 建昌县| 闽清县| 濮阳市| 淮北市|