單例模式確保每個(gè)指定的類(lèi)只存在一個(gè)實(shí)例對(duì)象,并且可以全局訪(fǎng)問(wèn)那個(gè)實(shí)例亥至。一般情況下會(huì)使用延時(shí)加載的策略悼沈,只在第一次需要使用的時(shí)候初始化。
在 iOS 中單例模式有
NSUserDefaults.standardUserDefaults() UIApplication.sharedApplication()
UIScreen.mainScreen()
NSFileManager.defaultManager()
另一種情況:需要一個(gè)全局類(lèi)來(lái)處理配置文件姐扮。
如何使用單例模式
這是一個(gè)日志類(lèi)絮供,有一個(gè)屬性 (是一個(gè)單例對(duì)象) 和兩個(gè)方法 (sharedInstance() 和 init())。
第一次調(diào)用 sharedInstance() 的時(shí)候茶敏,instance 屬性還沒(méi)有初始化壤靶。所以我們要?jiǎng)?chuàng)建一個(gè)新實(shí)例并且返回。
下一次你再調(diào)用 sharedInstance() 的時(shí)候惊搏,instance 已經(jīng)初始化完成贮乳,直接返回即可忧换。這個(gè)邏輯確保了這個(gè)類(lèi)只存在一個(gè)實(shí)例對(duì)象。
swift其他單例形式
//swift 推薦形式
final class Single: NSObject {
static let shared = Single()
private override init() {}
}
//objective-c 推薦形式
+ (id)sharedInstance {
static TestClass *sharedInstance = nil;
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[TestClass alloc] init];
});
return sharedInstance;
}