美文网首页
单例的完整写法

单例的完整写法

作者: 攻克乃还_ | 来源:发表于2017-09-14 08:02 被阅读8次
  • 有朋友还在单例的问题上纠结,如何写才算完备,今天在这里写一写。
  • 注意:单例一但创建,整个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;
}

相关文章

网友评论

      本文标题:单例的完整写法

      本文链接:https://www.haomeiwen.com/subject/puyrsxtx.html