#import "SingleInstance.h"
@interface SingleInstance ()<NSCopying,NSMutableCopying>
@end
static SingleInstance *instance = nil;
@implementation SingleInstance
+ (instancetype)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
/**************真正的单例需重载所有和创建有关的方法**************/
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [super allocWithZone:zone];
});
return instance;
}
- (id)copyWithZone:(nullable NSZone *)zone
{
return self;
}
- (id)mutableCopyWithZone:(nullable NSZone *)zone
{
return self;
}
/**************手动内存管理需做的操作**************/
- (instancetype)retain
{
return self;
}
- (oneway void)release
{
}
- (instancetype)autorelease
{
return self;
}
- (NSUInteger)retainCount
{
return MAXFLOAT;
}
- (void)dealloc
{
}
@end