單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例。這個類稱為單例類。
1.單例模式的要點:
顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。
2.單例模式的優點:
1.實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例。
2.靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程
單例實現代碼:
Singleton.h
+(Singleton *)sharedManager;
@property (nonatomic,strong) NSString * singletonData;
Singleton.m
@synthesize singletonData = _singletonData;
//第一步:靜態實例,并初始化
static Singleton * sharedManager = nil;
//第二步:實現一個實例構造方法檢查上面聲明的靜態實例是否為nil,如果是則新建并返回一個本類的實例
+(Singleton *)sharedManager{
static dispatch_once_t once;
dispatch_once(&once,^{
sharedManager = [[self alloc] init];
});
return sharedManager;
}
//第三步:重寫allocWithZone方法,用來保證其他人直接使用alloc和init試圖獲得一個新實例的時候不產生一個新實例(不寫也可)
+(instancetype)allocWithZone:(struct_NSZone*)zone{
staticdispatch_once_tcommonAlloc;
dispatch_once(&commonAlloc, ^{
commonManager= [superallocWithZone:zone];
});
returncommonManager;
}
sharedManager采用了GCD技術,這是一種基于C語言的多線程訪問技術。dispatch_once_t是GCD提供的結構體,使用時需要將GCD地址傳給dispatch_once函數,dispatch_once函數能夠記錄該代碼塊是否被調用過。dispatch_once函數的作用是在整個應用程序生命周期中只執行一次代碼塊(^{.....})。