单例的完整写法

2017-09-14  本文已影响8人  攻克乃还_
#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;
}
上一篇 下一篇

猜你喜欢

热点阅读