单例模式是一种既简单又实用的开发模式,重要是我们需要理解单例模式的思想。
单例?顾名思义就是单一的实例,也就是一个类只有一个实例对象。
怎样才能只存在一个实例对象呢?我们判断两个对象是否是同一个对象 是根据他们在内存中的地址来判断的,因此,我们在实现单例的时候,就需要在给对象分配内存地址时只分配一次就可以实现一个类的实例永远只存在一个。
我们知道alloc方法是分配内存的,其实alloc方法内部调用了+(instancetype)allocWithZone:(struct _NSZone *)zone方法,所以我们只需要重写这个方法即可。
.h文件
#import <Foundation/Foundation.h>
@interface SingleObject : NSObject
//命名规范:share+类名|default + 类名
+(instancetype)shareSingleObject;
@end
.m文件
#import "SingleObject.h"
@implementation SingleObject
//0.提供全局变量
static SingleObject *_instance;
//1.alloc-->allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
//一次性代码本身就是线程安全的
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
//2.提供类方法
+(instancetype)shareSingleObject
{
return [[self alloc]init];
}
//3.严谨
-(id)copyWithZone:(NSZone *)zone
{
return _instance;
}
-(id)mutableCopyWithZone:(NSZone *)zone
{
return _instance;
}
@end