单例模式

// 用来保存唯一的单例对象
static id _instace;
+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [super allocWithZone:zone];
    });
    return _instace;
}
+ (instancetype)sharedDataTool
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [[self alloc] init];
    });
    return _instace;
}
- (id)copyWithZone:(NSZone *)zone
{
    return _instace;
}
#pragma mark - 单例模式
static loginAction *shareLoginAction = nil;
+ (loginAction *) sharedInstance  //第二步:实例构造检查静态实例是否为nil
{
    @synchronized (self)
    {
        if (shareLoginAction == nil)
        {
             shareLoginAction = [[self alloc] init];
            
            NSLog(@"单例模式");
        }
    }
    
    return shareLoginAction;
}
+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
    @synchronized (self) {
        if (shareLoginAction == nil) {
            shareLoginAction = [super allocWithZone:zone];
            NSLog(@"重写allocWithZone方法");
            return shareLoginAction;
        }
    }
    return shareLoginAction;
}
- (id) copyWithZone:(NSZone *)zone //第四步
{
    return self;
}


你可能感兴趣的:(ios,单例模式,oc,gcd)