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

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

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

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

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 = @"中國西安
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长武县| 平邑县| 嘉黎县| 合阳县| 潞西市| 瑞金市| 盘锦市| 通渭县| 曲靖市| 二连浩特市| 岳普湖县| 南皮县| 建平县| 虹口区| 安庆市| 通化市| 昌平区| 嘉义市| 永川市| 汉川市| 巴彦淖尔市| 获嘉县| 夏津县| 民乐县| 奉化市| 普安县| 建昌县| 张家界市| 建宁县| 大港区| 龙里县| 溆浦县| 个旧市| 晋宁县| 昌乐县| 胶州市| 高雄县| 宁河县| 肃宁县| 如皋市| 德格县|