- 有朋友还在单例的问题上纠结,如何写才算完备,今天在这里写一写。
- 注意:单例一但创建,整个App的使用过程中都不会被释放,所以要谨慎使用。
#import <Foundation/Foundation.h>
@interface SUNTool : NSObject<NSCopying, NSMutableCopying>
+(instancetype)shareTool;
@end
#import "SUNTool.h"
@implementation SUNTool
//0.提供全局变量
static SUNTool *_instance;
//1.alloc-->allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
//加互斥锁解决多线程访问安全问题
// @synchronized(self) {
// if (_instance == nil) {
// _instance = [super allocWithZone:zone];
// }
// }
//本身就是线程安全的
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
//2.提供类方法
+(instancetype)shareTool
{
return [[self alloc]init];
}
//3.严谨
-(id)copyWithZone:(NSZone *)zone
{
return _instance;
}
-(id)mutableCopyWithZone:(NSZone *)zone
{
return _instance;
}
网友评论