什麼是單例模式 1.單例模式是一個類在系統中只有一個實例對象。通過全局的一個入口點對這個實例對象進行訪問。在 iOS 開發中,單例模式是非常有用的一種設計模式。如 下圖,是一個簡單單例模式的 UML 類圖。 2.iOS SDK 中也有許多類使用了單例模式,例如,UIApplication:當程式啟動...
什麼是單例模式
1.單例模式是一個類在系統中只有一個實例對象。通過全局的一個入口點對這個實例對象進行訪問。在 iOS 開發中,單例模式是非常有用的一種設計模式。如 下圖,是一個簡單單例模式的 UML 類圖。
2.iOS SDK 中也有許多類使用了單例模式,例如,UIApplication:當程式啟動的 時候,會調用 UIApplicationMain 方法,在該方法中,會實例化一個 UIApplication 對象,之後在程式中的任意地方調用 sharedApplication 方法都將返回一個與當前應用程式相關的 UIApplication 實例(UIApplicationMain 方法中創建的 UIApplication 單例)。
3.簡單GCD單例類的實現
#import "DMSingletion.h"
static DMSingletion *_dmSingletion = nil;
@implementation DMSingletion
+(id)sharedDmSingletion
{
if (_dmSingletion == nil) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_dmSingletion=[[DMSingletion alloc] init];
});
}
return _dmSingletion;
}
//重寫alloc 方法 即便是使用alloc 的方法 該方法只執行一次
+(instancetype)alloc
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_dmSingletion = [super alloc];
});
return _dmSingletion;
}
@end
//******************************************* #import "ViewController.h" #import "DMSingletion.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self textGCDSingletion]; [self textGCDRewWriteAlloc]; } -(void)textGCDSingletion { //創建第一個對象 DMSingletion *firstObject = [DMSingletion sharedDmSingletion]; //創建第二個對象 DMSingletion *secondObject = [DMSingletion sharedDmSingletion]; NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject); } -(void)textGCDRewWriteAlloc { //創建一個對象 DMSingletion *firstObject = [DMSingletion sharedDmSingletion]; DMSingletion *secondObject = [[DMSingletion alloc] init]; NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject); } @end