通過單例設計模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節省系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的選擇。
下面來點實在的,建立單例**上
方法1:基於執行緒安全建立乙個單例
.h做一下宣告
+ (id)sharedinstancebysynchronized;
.m實現一下單例類
+ (id)sharedinstancebysynchronized
}return instance;
}這樣就可以需要用到單例類的時候呼叫單例類的介面api,要先導入標頭檔案才能使用
方法2:用gcd是對執行緒的高度封裝,執行緒以後進一步詳解
.h+ (id)sharedinstancebygcd;
.m//利用gcd手寫單例
+ (id)sharedinstancebygcd
);return instance;
}測試一下是不是正確產生了乙個單例,就需要我們自己用**測試,通過列印輸出兩個變數的位址,就知道是不是同乙個單例類
instance *instance1=[instance sharedinstancebygcd];
instance *instance2=[instance sharedinstancebygcd];
nslog(@"%@---%@",instance1,instance2);
列印輸出instance1=instance2的位址,說明通過執行緒鎖建立成功了單例
instance *instance3=[instance sharedinstancebysynchronized];
instance *instance4=[instance sharedinstancebysynchronized];
nslog(@"%@---%@",instance3,instance4);
列印輸出instance3=instance4的位址,說明通過gcd建立成功了單例
2015-11-01 22:38:04.700 單例測試效能[746:28450] 11---
2015-11-01 22:38:04.700 單例測試效能[746:28450] 11---
兩個單例的位址相同,建立單例成功
這裡我們做一下拓展,測試一下兩個單例的效能
**如下:需要用到單例需匯入單例的標頭檔案
可以在本檔案呼叫[self test1],[self test2],看一下時間差,就能知道效能的好壞
- (void)test1
{long num=1000;
cfabsolutetime start=cfabsolutetimegetcurrent();
for (int i=0; i
2015-11-01 22:38:05.880 單例測試效能[746:28450] test1:0.000168
2015-11-01 22:38:05.880 單例測試效能[746:28450] test2:0.000319
2015-11-01 22:38:08.128 單例測試效能[746:28450] test1:0.000164
2015-11-01 22:38:08.128 單例測試效能[746:28450] test2:0.000327
從列印出來的數字可以看出gcd的單例優於synchronized的效能
iOS 單例設計模式
聯絡人 石虎暱稱 嗡嘛呢叭咪哄 一 概念 單例模式 singleton 也叫單態模式,是設計模式中最為簡單的一種模式 1.單例的作用 整個應用或系統只能有該類的乙個例項,即是在整個專案中,這個類的物件只能被初始化一次。單例類保證了應用程式的生命週期中有且僅有乙個該類的例項物件,而且易於外界訪問。2....
iOS設計模式 單例
備註 只能通過類的類方法才能建立單例類的例項,類名 alloc init 建立例項沒有用的。原理圖 1.單例模式人人用過,嚴格的單例模式很少有人用過 2.嚴格的單例模式指的是無法通過常規的 alloc init 方法來生成物件,派生出來的子類也不能產生出物件,而只能通過單例的方法獲取到物件原始碼 s...
IOS設計模式 單例設計模式
在軟體工程中,單例是一種用於實現單例的數學概念,即將類的例項化限制成僅乙個物件的設計模式。或者我的理解是 單例是一種類,該類只能例項化乙個物件。有些變數只需要初始化一次 如從檔案中讀取配置引數,讀取裝置型號等等 可以使用dispatch once來進行讀取優化,保證只呼叫api一次,以後就只要直接訪...