iOS開發多線程篇—單例模式(ARC)java
1、簡單說明:ios
設計模式:多年軟件開發,總結出來的一套經驗、方法和工具設計模式
java中有23種設計模式,在ios中最經常使用的是單例模式和代理模式。安全
2、單例模式說明ruby
(1)單例模式的做用 :能夠保證在程序運行過程,一個類只有一個實例,並且該實例易於供外界訪問,從而方便地控制了實例個數,並節約系統資源。多線程
(2)單例模式的使用場合:在整個應用程序中,共享一份資源(這份資源只須要建立初始化1次),應該讓這個類建立出來的對象永遠只有一個。工具
(3)單例模式在ARC\MRC環境下的寫法有所不一樣,須要編寫2套不一樣的代碼spa
能夠用宏判斷是否爲ARC環境線程
(4)在ARC中,單例模式的實現思路設計
在.m中保留一個全局的static的實例 static id _instance;
1)重寫allocWithZone:方法,在這裏建立惟一的實例(注意線程安全)
2)提供1個類方法讓外界訪問惟一的實例
3)實現copyWithZone:方法
(5)非ARC中(MRC),單例模式的實現(比ARC多了幾個步驟)
實現內存管理方法
- (id)retain { return self; }
- (NSUInteger)retainCount { return 1; }
- (oneway void)release {}
- (id)autorelease { return self; }
3、單例模式(ARC)
1.說明
重寫allocWithzone:方法,控制內存分配。由於alloc內部會調用該方法,每次調用allocWithzone:方法,系統都會建立一塊新的內存空間。
alloc方法中:永遠只分配一次內存
init方法中:保證全部的MP3數據都只加載一次。
2.代碼示例
建立一個音頻工具類,繼承子NSObject類。
在該類中實現如下代碼,觀察:
在主控制器中,建立工具類對象:
打印結果:
說明:在alloc內部會調用更底層的方法allocWithZone方法分配內存空間,上面的代碼建立了四個不一樣的對象。
3.單例模式:設計思路
(1)永遠只分配一塊內存來建立對象
(2)提供一個類方法,返回內部惟一的一個變量
(3)最好保證init方法也只初始化一次
代碼示例:
建立一個音頻工具類,繼承子NSObject類。
在該類中按照設計思路實現如下代碼:
YYAudioTool.m文件
YYAudioTool.h文件
主控制器中建立對象:
觀察打印結果:
說明:整個程序中只建立一個對象實例。
4.static補充:
注意:static id instace=nil;和static id instace;instace=nil;的區別