单例模式简介
单例模式的百度百科
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
单例模式的实现
第一步:声明
#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产生对象时对象的唯一性;