美文网首页iOS进阶之路一步步学习ios
iOS中的单例模式如何销毁重建

iOS中的单例模式如何销毁重建

作者: HappyCoco | 来源:发表于2016-02-22 15:03 被阅读7115次

    在iOS中,单例模式是比较常用的一种模式,保证相关代码只会执行一次,但有时候会有一种场景,需要销毁单例进行重建。

    如果不采用GCD提供的dispatch_once方法,需要加锁操作,是比较耗性能的。

    那么这个时候如何继续采用dispatch_once方法?

    dispatch_once_t的描述是:

    
    typedef long dispatch_once_t;
    
    

    dispatch_once在判断是否需要执行的关键语句:

    
    if(DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
    
    dispatch_once_f(predicate, context, function);
    
    }
    
    

    可以了解到 dispatch_once_t参数的初始值就是0l,只需要重置dispatch_once_t参数及实例参数,具体代码如下:

    
    static SpTest *sInstance = nil;
    
    static dispatch_once_t onceToken;
    
    + (instancetype)sharedManager
    
    {
    
      dispatch_once(&onceToken, ^{
    
        sInstance= [[self alloc] init];;
    
        NSLog(@"dispatch once");
    
    });
    
      return sInstance;
    
    }
    
    + (void)tearDown{
    
      sInstance=nil;
    
      onceToken=0l;
    
    }
    
    

    回过头来想想,其实这样实现是一种比较粗陋的方式,需要考虑在销毁的同时实例的使用状况等,其实是违背dispatch_once使用的初衷的。

    不排除真的有这种单例需要销毁的场景,但多数需要销毁的单例实际上可能不适用于单例这种模式,可能需要重新考虑架构设计问题。

    相关文章

      网友评论

      本文标题:iOS中的单例模式如何销毁重建

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