单例的实现(完整版代码)
#import "XMGTool.h"
static XMGTool * _instance;//静态变量保证了单例的唯一性,静态变量是程序一开始就存在的
@interface XMGTool ()<NSCopying, NSMutableCopying>
@end
@implementation XMGTool
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
+(instancetype)shareTool
{
return [[self alloc]init];
}
- (nonnull id)copyWithZone:(nullable NSZone *)zone {
return _instance;
}
- (nonnull id)mutableCopyWithZone:(nullable NSZone *)zone {
return _instance;
}
@end
外界的调用:
XMGTool *t1 = [[XMGTool alloc]init];
XMGTool *t2 = [[XMGTool alloc]init];
XMGTool *t3 = [XMGTool shareTool];
XMGTool *t4 = [t1 mutableCopy];
NSLog(@"\n%@--\n%@--\n%@---\n%@",t1,t2,t3,t4);
打印结果
<XMGTool: 0x6000011b2e30>--
<XMGTool: 0x6000011b2e30>--
<XMGTool: 0x6000011b2e30>---
<XMGTool: 0x6000011b2e30>