在IOS中單例設計模式有很廣泛的用途,它保證一個類只有一個實例,并提供一個訪問它的全局訪問點,一個app只有一個實列,也就是說他一直存在,除非你手動置空,在內存里面也只會用到一個地址.
蘋果官方提供了很多單列對象供用戶使用,例如:
UIApplication類提供了 +sharedApplication 方法創建和獲取UIApplication單例.
NSBundle類提供了 +mainBundle 方法獲取NSBundle單例.
NSFileManager類提供了 +defaultManager 方法創建和獲得NSFileManager單例(使用代理時需要調用 -init 實例化方法來實例化一個新的對象).
NSUserDefaults類提供了 +defaultUserDefaults 方法去創建和獲取NSUserDefaults單例.
NSNotificationCenter類提供了 +defaultCenter 方法創建和獲取NSNotificationCenter單例.
我所知道的單例有兩種實現方式,根據線程安全的實現來區分的話,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數。
synchronized線程鎖的方式
```
+ (instancetype)sharedPersonSync{
staticidinstance;
@synchronized(self) {
if (instance ==nil) {
instance = [[selfalloc] init];}
}
returninstance;
}
```
GCD方式
```
+ (instancetype)sharedPerson {
static dispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
returninstance;
}
```
Warning:單例雖然可以達到共享傳值的目的,但非必要的情況下最好不要使用單例的方式實例化對象.