單例模式簡介
單例模式的百度百科
單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例
單例模式的實現
第一步:聲明
#import <Foundation/Foundation.h>
@interface ShareManager : NSObject
+ (instancetype)shareManager;
@end
第二步:實現步驟
#import "ShareManager.h"
@implementation ShareManager
static ShareManager *manager = nil;
/*
創建單利,單利的唯一性
*/
+ (instancetype)shareManager{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[ShareManager alloc]init];
});
return manager;
}
/*
覆蓋該方法主要確保 alloc init方法創建對象的唯一性
*/
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [super allocWithZone:zone];
});
return manager;
}
/*
確保通過copy產生對象的唯一性
*/
- (id)copy{
return self;
}
/*
確保通過mutableCopy產生對象的唯一性
*/
- (id)mutableCopy{
return self;
}
@end
部分說明
1.由單例的唯一性可以知道,我們在使用單例模式時,一定要確保該單例類在全局只有一個實例化對象;
2.之所以會覆蓋:+ (instancetype)allocWithZone:(struct_NSZone*)zone方法,是為了確保通過[[ShareManager alloc] init]方法來初始化對象時對象的唯一性,其中alloc會調用該方法,只是zone參數默認為nil;因為當前類覆蓋了allocWithZone方法,所以只能通過它的父類來分配內存,即通過[super allocWithZone:zone]方式;
3.覆蓋copy和mutableCopy方法,是為了確保通過copy和mutableCopy產生對象時對象的唯一性;