美文网首页
Objective-C 单例创建

Objective-C 单例创建

作者: spectatorNan | 来源:发表于2016-03-24 21:53 被阅读23次
#import "Singleton.h"

@implementation Singleton
static id manager = nil;
+ (Singleton *)manager {
    
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[Singleton alloc] init];
    });
    
    return manager;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [super allocWithZone:zone];
    });
    return manager;
}

- (id)copy {
    return [Singleton manager];
}

下面是本人所犯的错误

#import "Singleton.h"

@implementation Singleton
static id manager = nil;
+ (Singleton *)manager {
    
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[Singleton alloc] init];
    });
    
    return manager;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    return [Singleton manager]; // 创建对象init的时候会调用该方法,所以这种写法的后果就是进入死循环。无限执行manager方法和本方法。
}

- (id)copy {
    return [Singleton manager];
}

相关文章

网友评论

      本文标题:Objective-C 单例创建

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