讀書筆記-常用設計模式之單例,讀書筆記設計模式

來源:互聯網
上載者:User

讀書筆記-常用設計模式之單例,讀書筆記設計模式

1、單例模式的作用是解決”應用中只有一個執行個體“的一類問題。

2、在一個iOS應用的生命週期中,有時候我們只需要某個類的一個執行個體,如果有多個執行個體就會佔用過多的記憶體。例如當程式啟動時,應用的狀態由UIApplication類的一個執行個體維護,這個執行個體代表了整個”應用程式物件“,它只能是一個執行個體,其作用是實現程式中一些共用資源的訪問和狀態的保護等。

3、單例模式一般會封裝一個靜態屬性,並提供靜態執行個體的建立方法。代碼如下:

 1 // 2 //Singleton.h 3 // 4  5 @interface Singleton : NSObject 6  7 + (Singleton*)sharedManager; 8 //屬性 9 @property (nonatomic ,strong) NSString* singletonData; 10 11 @end12 13 -------------------------------------------------------------------------14 15 //16 //Singleton.m17 //18 19 #import "Singleton.h"20 21 @implementation Singleton22  static Singleton *sharedManager = nil;23 //建立靜態執行個體的方法24 + (Singleton*)sharedManager25 {26     static dispatch_once_t once;27     dispatch_once(&once, ^{28         sharedManager = [[self alloc] init];29     });30     return sharedManager;31 }32 //dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);33 @end

sharedManager方法我們採用了dispatch_once函數(GCD技術,Grand Central Dispatch,是一種基於C語言的多線程訪問技術),它接收一個dispatch_once_t的參數,這個參數GCD提供的結構體,使用時將GCD地址傳給dispatch_once函數,這個函數能夠記錄該代碼塊是否被調用過。還有一個塊參數。對於給定的一個predicate來說,該函數會保證相關的塊必定會執行,而且只執行一次,最重要的是這個方法是完全安全執行緒的,就不需要線程鎖@synchronized之類的語句。需要注意的是,對於只需要執行一次的塊來說,傳入的predicate必須是完全相同的,所以predicate常常會用static或者global來修飾。這樣寫代碼簡單清晰,而且做到了安全執行緒,這樣實現的效率也很高。

4、在Cocoa Touch架構中,有UIApplication、UIaccelerometer、NSUserDefaults和NSNotificationCenter等單例。另外,NSFileManager和NSBundle類雖然屬於Cocoa架構的內容,但也可以在Cocoa Touch架構中使用。(Cocoa架構中的單例類有NSFileManager、NSBundle、NSWorkspace和NSApplication等)。 

4.1、UIApplication

UIApplication類的執行個體提供了應用程式的集中控制點來保持應用的狀態。UIApplication執行個體總是分配給應用程式委派物件(UIApplicationDelegate),通過應用程式委派物件來響應低記憶體、應用啟動、後台運行和應用終止等時間。下面我們重點介紹這個類的幾個方法和屬性。

4.1.1 + sharedApplication方法。建立和獲得UIApplication執行個體的方法。

4.1.2 idleTimerDisabled屬性。設定和獲得“空閑時間禁止”的狀態。預設值是NO,即預設情況下系統會鎖定螢幕。

4.1.3 - openURL:方法。可以開啟一些內建的iOS應用,其中包括開啟瀏覽器、開啟地圖、撥打到電話、傳送簡訊和發送E-mail。

 1 //開啟瀏覽器 2 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; 3 [[UIApplication sharedApplication] openURL:url]; 4  5 //開啟Google地圖時,實際上是通過內建瀏覽器開啟的。 6 NSString* searchQuery = @"中國西安

相關文章

聯繫我們

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