OC單利
#import "HttpTools.h"
+ (instancetype)shareManager;
#import "HttpTools.m"
+ (instancetype)shareManager
{
static id instance;
static dispatch_once_t onceToken;
// onceToken默認(rèn)等于0, 如果是0就會(huì)執(zhí)行block, 如果不是0就不會(huì)執(zhí)行
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
Swift單利
推薦使用
// HttpTools.swift
static let instance: HttpTools = HttpTools()
class func shareHttpTools() -> HttpTools {
return instance
}
仿OC版
// 在Swift中, 類方法中是不允許定義靜態(tài)變量的
static var once_t: dispatch_once_t = 0
static var instance: HttpTools?
/// 用于獲取單粒對(duì)象的類方法
class func shareHttpTools() -> HttpTools{
dispatch_once(&once_t) { () -> Void in
instance = HttpTools()
}
return instance!
}
單利優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1:一個(gè)類只被實(shí)例化一次,提供了對(duì)唯一實(shí)例的受控訪問。
2:節(jié)省系統(tǒng)資源
缺點(diǎn):
1: 單例對(duì)象一旦建立,對(duì)象指針是保存在靜態(tài)區(qū)的,單例對(duì)象在堆中分配的內(nèi)存空間,會(huì)在應(yīng)用程序終止后才會(huì)被釋放。
2: 單例類無法繼承,因此很難進(jìn)行類的擴(kuò)展。
3: 單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。
4: 單例不適用于變化的對(duì)象,如果同一類型的對(duì)象總是要在不同的用例場(chǎng)景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài)。