iOS設計模式(1):單例模式

來源:互聯網
上載者:User


單例模式簡單又經常被面試提到,所以放在第一位置。

什麼是單例模式?

單例,字面意思就是整個應用只能建立或存在一個執行個體。

為什麼需要單例模式?

1,整個應用程式只能有一個執行個體。例如:UIApplication類:當應用程式啟動時,應用的狀態由UIApplication類的一個執行個體維護,這個執行個體代表了整個“應用程式物件”,實現應用程式中的一些共用資源的訪問和狀態的保持等。

2,在iOS應用整個生命週期中,只需要一個執行個體。例如:UIAccelerometer類:即時獲得重力加速計資料,保持x,y,z軸的狀態。這個執行個體只需要一個執行個體,多個執行個體完全沒有意義(一台裝置還能產生2個加速度?),只會佔用記憶體。

...

單例模式的實現原理?

怎麼保持怎有一個執行個體呢?

首先我們會想到,1,用個if語句判斷類是否已經被執行個體化。如果未被執行個體化,則執行個體化。否則直接返回。2,如果單例對象由多個線程訪問呢?所有安全執行緒至關重要。

單例模式一般會封裝一個靜態屬性,並提供靜態執行個體的建立方法。


下面先用GCD實現:

建立一個Singleton類:

Singleton.h:聲明一個靜態屬性,並提供靜態執行個體的建立方法。

@interface Singleton : NSObject@property (nonatomic,strong) NSString *singletonData;+(Singleton *)sharedManager;@end

Singleton.m

@implementation Singleton@synthesize singletonData=_singletonData;  //預設static Singleton *sharedManager=nil;+(Singleton *)sharedManager{    static dispatch_once_t once;    dispatch_once(&once, ^{        sharedManager=[[Singleton alloc] init];    });    return sharedManager;}@end

dispatch_once函數:代碼只會被運行一次,而且還是線程同步的。所以這裡也不需要使用@synchronized。
GCD是基於C語言的多線程訪問技術。比較簡單又很重要,不熟悉的可以先熟悉下。格式其實也不需要過多記憶,Xcode提供的代碼模版也有。


單例模式在iOS中的應用

1,UIApplication
2,UIAccelerometer
3,NSUserDefaults:讀取應用程式設定項目。
4,NSNotificaionCenter:提供資訊廣播通知。
5,NSFileManager:提供訪問檔案系統的通用操作,可以定位、建立、複製檔案和檔案夾。
6,NSBundle:提供動態載入(或卸載)可執行代碼、定位資源檔以及資源本地化、訪問檔案系統等。


聯繫我們

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