美文网首页
iOS单例之温故知新

iOS单例之温故知新

作者: 我是卖报的小行家 | 来源:发表于2020-12-16 10:03 被阅读0次

单例两种写法

+(instancetype)defaultTools{
    static id instance = nil;
    static dispatch_once_t onceToken; // onceToken==0
    dispatch_once(&onceToken, ^{
        instance = [[self alloc]init];
    });
    // onceToken==-1;
    return instance;
}
+(instancetype)defaultTools{
    static id instances = nil;
    @synchronized (self) { //互斥锁,保证线程读写分离
        if (instances == nil) {
            instances = [[self alloc]init];
        }
    }
    return instances;
}

两者效率:1>2
原因:第一种:dispatch_once 是线程安全的,只需要每次对onceToken进行判断,最开始onceToken为0,一旦初始化复制完成后onceToken==-1。判断几乎不耗时
第二种:互斥锁等待需要耗时,且耗时时长大于第一种判断的耗时
综合单例还是使用第一种!

相关文章

网友评论

      本文标题:iOS单例之温故知新

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