單例模式可能是設計模式中最簡單的形式了辑舷,這一模式的意圖就是使得類中的一個對象成為系統(tǒng)中的唯一實例炼邀。它提供了對類的對象所提供的資源的全局訪問點讶舰。因此需要用一種只允許生成對象類的唯一實例的機制。
1.單例的作用:
- 可以保證的程序運行過程妇押,一個類只有一個示例跷究,而且該實例易于供外界訪問
- 從而方便地控制了實例個數(shù),并節(jié)約系統(tǒng)資源敲霍。
2.單例模式的使用場合
- 類只能有一個實例俊马,并且必須從一個人為數(shù)值的訪問點對其訪問。
- 這個唯一的實例只能通過子類化進行拓展肩杈,并且拓展的對象不會破壞客戶端代碼柴我。
3.實現(xiàn)方式
3.1簡單易理解的方法就是用通過dispatch_once_t來保證線程的安全性
+ (instancetype)sharedInstance {
static dispatch_once_t once;
static id __singletion;
dispatch_once(&once, ^{
__singletion = [[self alloc] init];
});
return __singletion;
}
可以用把他封裝在一個宏里面,這樣項目里就都可以共用了扩然,不用每次實現(xiàn)這樣方法
#define SGR_SINGLETION(...) \
+ (instancetype)sharedInstance NS_SWIFT_NAME(shared());
#define SGR_DEF_SINGLETION(...) \
+ (instancetype)sharedInstance \
{ \
static dispatch_once_t once; \
static id __singletion; \
dispatch_once(&once,^{__singletion = [[self alloc] init];}); \
return __singletion; \
}
3.2傳統(tǒng)方法
+(instancetype)sharedInstance {
static WMSingleton *singleton = nil;
if (! singleton) {
singleton = [[self alloc] initPrivate];
}
return singleton;
}
- (instancetype)init {
@throw [NSException exceptionWithName:@"這個是個單例" reason:@"應該這樣調(diào)用 [WMSingleton sharedInstance]" userInfo:nil];
return nil;
}
//實現(xiàn)自己真正的私有初始化方法
- (instancetype)initPrivate {
self = [super init];
return self;
}